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

时间:2011-09-18 08:48:18

标签: amazon-s3 amazon-web-services amazon-cloudfront

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

我的服务器上的网站和s3上的所有mp3,然后通过cloudfront分发。到目前为止一切都很好。

客户现在希望用户能够选择多个音轨,然后批量下载或批量下载,而不是一次下载。

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

无论如何,我可以在s3或CF上创建一个拉链,还是有人将文件批量/分组到一个拉链?

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

我非常感谢某些方向。

最佳

3 个答案:

答案 0 :(得分:1)

我担心您将无法创建没有额外处理的批次。启动EC2实例可能是为每个用户创建批处理的选项

答案 1 :(得分:1)

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

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

在我的情况下,我使用Rails +它的Paperclip插件,这意味着我无法轻松地一次性下载所有用户的图像,因为这些文件分散在很多子目录中。 / p>

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

/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?

答案 2 :(得分:0)

s3是基于单个http请求。

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

Java api - 使用TransferManager

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

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

没有批量下载抱歉。