允许用户从 AWS s3 或 Cloudfront 批量下载文件

Posted

技术标签:

【中文标题】允许用户从 AWS s3 或 Cloudfront 批量下载文件【英文标题】:Allowing users to download files as a batch from AWS s3 or Cloudfront 【发布时间】:2011-11-19 14:24:17 【问题描述】:

我有一个网站,允许用户搜索音乐曲目并将他们选择的音乐下载为 mp3。

我的服务器上有网站,s3 上有所有的 mp3,然后通过云端分发。到目前为止一切顺利。

客户现在希望用户能够选择多个音乐曲目,然后将它们全部下载或批量下载,而不是一次下载 1 个。

通常我会将所有文件放在一个 zip 中,然后向用户提供一个指向该新 ​​zip 文件的链接以供下载。在这种情况下,由于文件位于 s3 上,这需要我首先将所有文件从 s3 复制到我的网络服务器,然后将它们处理成一个 zip,然后从我的服务器下载。

我是否可以在 s3 或 CF 上创建一个 zip,或者是否可以将文件批处理/分组到一个 zip 中?

也许我可以设置一个 EC2 实例来处理这个问题?

我将不胜感激。

最好的

【问题讨论】:

我面临着完全相同的情况,请告诉我您是如何处理这种情况的?谢谢... 多线程就是答案docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/… 【参考方案1】:

恐怕您无法在没有额外处理的情况下创建批次。启动 EC2 实例可能是为每个用户创建批处理的一种选择

【讨论】:

【参考方案2】:

我正面临完全同样的问题。到目前为止,我唯一能找到的是亚马逊的 s3sync 工具:

https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

就我而言,我使用的是 Rails + 它的 Paperclip 插件,这意味着我无法一次性轻松下载所有用户的图像,因为文件分散在很多子目录中。

但是,如果您可以更好地对用户的文件进行分组,可以这样说:

/users/<ID>/images/...
/users/<ID>/songs/...

...等等,那么您可以立即解决您的问题:

aws s3 sync s3://<your_bucket_name>/users/<user_id>/songs /cache/<user_id>

请记住,您必须为您的服务器提供正确的凭据,以便 S3 CLI 工具可以在不提示输入用户名/密码的情况下工作。

那应该给你排序。

这里的其他讨论: Downloading an entire S3 bucket?

【讨论】:

【参考方案3】:

s3 是基于单个 http 请求的。

所以答案是线程来实现同样的事情

Java api - 使用 TransferManager

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html

您可以通过多线程获得出色的性能。

抱歉,没有批量下载。

【讨论】:

以上是关于允许用户从 AWS s3 或 Cloudfront 批量下载文件的主要内容,如果未能解决你的问题,请参考以下文章

S3 / Cloudfront 下载限制

如何开通 CloudFront 和 Route 53

如何使用 C# HttpClient 或 AWS SDK 通过 CloudFront 将视频上传到 S3

如何使用 CloudFront 从 AWS S3 安全地播放 .m3u8 流文件?

从浏览器缓存提供图像时,AWS S3 + CloudFront 会出现 CORS 错误

AWS S3和Cloudfront单个文件带宽?