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

3
我有一个网站,允许用户搜索音乐曲目,并下载他们选择的mp3格式的歌曲。该网站已经部署在我的服务器上,所有的mp3都位于S3,并通过CloudFront进行分发,目前一切顺利。客户现在希望用户能够选择多个音乐曲目,然后批量或成批地将它们全部下载,而不是一次一个。通常情况下,我会将所有文件放在一个zip文件中,然后向用户提供一个链接来下载这个新的zip文件。但在这种情况下,因为文件位于S3上,所以需要先将所有文件从S3复制到我的Web服务器上,然后将它们打包成Zip文件并从我的服务器下载。有没有办法在S3或CF上创建Zip文件,或者将文件批量/分组打包成Zip文件?也许我可以设置一个EC2实例来处理这个问题?我非常感谢您的指导。

我面临着完全相同的情况,请告诉我你是如何处理这种情况的?谢谢... - Siva
多线程是答案。 - Nicholas DiPiazza
3个回答

1

我遇到了完全相同的问题。到目前为止,我找到的唯一解决方法是亚马逊的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工具可以在不提示用户名/密码的情况下工作。
这样就可以解决问题了。
更多讨论请点击此处: 下载整个S3存储桶?

1

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


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接