使用Laravel下载大量文件

时间:2018-04-24 07:54:17

标签: php laravel amazon-s3 downloading

我遇到需要从S3下载和压缩大量文件(可能超过2000个)然后发送它们以供客户端下载的情况。每个文件都不是那么大,但它是服务器完成的大型操作。

我已经设置了这样一种方式,我在工作环境中处理此任务,并使用S3与S3一起下载文件并压缩它们。我仍然发现,当这个作业处理时,这会严重影响服务器,有时会导致“内存不足”错误。

有人可以推荐一种更好的处理此方案的方法吗?如何从S3下载大量文件,将它们合并到一个存档中,然后有效地将该存档提供给客户?

我注意到Dropbox本身不允许你一次下载超过200个文件,这是攻击它的最好方法吗?要下载这些内容吗?

1 个答案:

答案 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

压缩代码取自:Compressing a directory of files with PHP