使用AWS S3路径中的文件创建一个zip文件

时间:2018-08-28 18:43:05

标签: python amazon-web-services amazon-s3 aws-lambda

有没有一种方法可以为用户提供一个URL,以便用户从S3路径下载所有内容?

否则,有没有一种方法可以使用在S3路径上递归找到的所有文件来创建zip?

即。 my-bucket/media/123/*

每个路径通常包含1K +图像和10+视频。

3 个答案:

答案 0 :(得分:2)

没有内置方法。您必须下载所有文件,在本地进行压缩,然后重新上传,然后只有一个URL可供下载。

答案 1 :(得分:1)

如前所述,没有内置方法可以做到。但是从另一方面来说,您无需下载和上传回文件。您可以在相同的AWS区域/位置创建无服务器解决方案。

您可以通过不同的方式实现它:

在这种情况下,您将通过API网关触发lambda函数。 Lambda函数将从您的存储桶文件中创建档案,并将结果上传回S3。 Lambda函数将URL返回到此存档***。 这种方式的缺点:Lambda不能执行超过5分钟的时间,并且如果文件太多,将没有足够的时间来处理它们。请注意,S3的最大文件大小为5 TB。单个PUT中可以上传的最大对象为5 GB。对于大于100兆字节的对象,应考虑使用分段上传功能。 示例:Full guide to developing REST API’s with AWS API Gateway and AWS Lambda

  • Step Function(API网关+调用Step Function的Lambda函数)

5分钟足以创建一个归档文件,但是如果您要进行一些预处理,我建议您使用“步进功能”。 SF具有最大的注册活动/状态数和请求大小的限制(您不能在请求中传递存档),但是很容易避免(如果在设计时考虑到这一点)。查看更多there

就个人而言,我个人使用两种方式。

***这是不好的做法-在S3上给用户真实文件的路径。最好使用CloudFront CDN。 CloudFront允许您控制URL的生存期,并提供不同的安全性和限制方式。

答案 2 :(得分:0)

您无法对s3进行任何调用以将其下载为.zip。您必须创建一个递归下载所有对象并压缩它们的服务。不过,请务必记住S3对象的大小限制。限制为5TB per object。在重新上传之前,您需要添加检查以验证.zip的大小。