我遇到需要从S3下载和压缩大量文件(可能超过2000个)然后发送它们以供客户端下载的情况。每个文件都不是那么大,但它是服务器完成的大型操作。
我已经设置了这样一种方式,我在工作环境中处理此任务,并使用S3与S3一起下载文件并压缩它们。我仍然发现,当这个作业处理时,这会严重影响服务器,有时会导致“内存不足”错误。
有人可以推荐一种更好的处理此方案的方法吗?如何从S3下载大量文件,将它们合并到一个存档中,然后有效地将该存档提供给客户?
我注意到Dropbox本身不允许你一次下载超过200个文件,这是攻击它的最好方法吗?要下载这些内容吗?
答案 0 :(得分:0)
// Laravel:
$tempImage = tempnam(sys_get_temp_dir(), $filename);
copy('https://my-cdn.com/files/image.jpg', $tempImage);
return response()->download($tempImage, $filename);
逐个下载文件,将它们放在目录中,然后在完成下载后,使用以下方法压缩文件夹:
// Core php:
$archive_name = 'path\to\archive\arch1.tar';
$dir_path = 'path\to\dir';
$archive = new PharData($archive_name);
$archive->buildFromDirectory($dir_path); // make path\to\archive\arch1.tar
$archive->compress(Phar::GZ); // make path\to\archive\arch1.tar.gz
unlink($archive_name); // deleting path\to\archive\arch1.tar