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

问题描述 投票:0回答:4

有没有办法为用户提供单个 URL 以从 S3 路径下载所有内容?

否则,有没有办法以递归方式创建包含 S3 路径上找到的所有文件的 zip?

即。

my-bucket/media/123/*

每个路径通常有 1K+ 图片和 10+ 视频。

python amazon-web-services amazon-s3 aws-lambda
4个回答
3
投票

没有内置方法。您必须下载所有文件,在“本地”压缩它们,重新上传,然后您将获得一个可供下载的 URL。


2
投票

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

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

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

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

5 分钟应该足以创建存档,但如果您要进行一些预处理,我建议您使用 Step Function。 SF 对注册活动/状态的最大数量和请求大小有限制(您不能在请求中传递存档),但很容易避免它(如果您在设计时考虑到这一点)。查看更多那里

就我个人而言,我针对不同情况使用这两种方法。

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


0
投票

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


0
投票

使用 zipkit.io 之类的东西 - 我们已经用它来压缩数十万个图像文件,没有出现任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.