我有一个网站,允许用户搜索音乐曲目并下载他们选择的mp3曲目。
我的服务器上的网站和s3上的所有mp3,然后通过cloudfront分发。到目前为止一切都很好。
客户现在希望用户能够选择多个音轨,然后批量下载或批量下载,而不是一次下载。
通常我会将所有文件放在一个zip中,然后向用户显示要下载的新zip文件的链接。在这种情况下,由于文件在s3上,需要我首先将所有文件从s3复制到我的网络服务器,然后将它们处理成zip,然后从我的服务器下载。
无论如何,我可以在s3或CF上创建一个拉链,还是有人将文件批量/分组到一个拉链?
也许我可以设置一个EC2实例来处理这个问题?
我非常感谢某些方向。
最佳
乔
答案 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
多线程可以获得出色的性能。
没有批量下载抱歉。