【发布时间】:2018-10-04 09:27:12
【问题描述】:
我有一种情况,我需要从 S3 下载并压缩大量文件(可能超过 2000 个),然后将它们发送给客户端下载。每个文件都不是那么大,但它是服务器要完成的一项大型操作。
我已经设置了这样一种方式,即我在工作环境中处理此任务,并使用带有 S3 的流来下载文件并压缩它们。我仍然发现,当此作业处理时,这会给服务器带来很大压力,有时会导致“内存不足”错误。
谁能推荐一种更好的方法来处理这种情况?如何从 S3 下载大量文件,将它们组合成一个存档,然后高效地将该存档提供给客户?
我注意到 Dropbox 本身不允许您一次下载超过 200 个文件,这是解决此问题的最佳方法吗?分块下载?
【问题讨论】:
-
只下载文件夹中的文件,然后压缩不行?
-
有很多文件。完成这项任务似乎占用了大量内存......
-
你怎么知道要下载的文件名?访问该文件夹,或者您拥有列表来特别调用这些文件?
-
文件密钥存储在数据库中,所以我知道我需要哪些。从我在 S3 中看到的情况来看,无法压缩整个目录并下载它,所以我必须一个一个地去。
-
Guzzle allows async requests 这可能会优化您实现的吞吐量。 AWS SDK v3 开箱即用,因此您很有可能也可以使用它来执行异步请求。
标签: php laravel amazon-s3 download