允许用户从 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 批量下载文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# HttpClient 或 AWS SDK 通过 CloudFront 将视频上传到 S3
如何使用 CloudFront 从 AWS S3 安全地播放 .m3u8 流文件?