Laravel 使用 s3 存储桶上的文件创建 zip
Laravel creating zip with files on s3 bucket
所以我一直在尝试为此寻找解决方案,我认为这与我在存储上创建 zip 的方式有关。
控制器:
$disk = Storage::disk('s3');
if($disk->exists('storage/mail_attachments/'.$this->zip_file)) {
$disk->delete('storage/mail_attachments/'.$this->zip_file);
}
$zip = new \ZipArchive();
$zip->open($disk->put('storage/mail_attachments/'. $this->zip_file, ''), \ZipArchive::CREATE);
$download_file = file_get_contents(config('filesystems.disks.s3.url') . '/storage/mail_attachments/user_form_'.$this->uf_id.'.pdf');
$zip->addFromString(basename(config('filesystems.disks.s3.url') . '/storage/mail_attachments/user_form_'.$this->uf_id.'.pdf'), $download_file);
$zip->close();
我们将其托管在 Laravel vapor 上并在日志中看到:
ZipArchive::close(): Failure to create temporary file: Read-only file system
上面的代码设法创建了 zip 文件,但在查看时它是空的。使用 public_paths 创建 zip 效果很好。
如有任何帮助或建议,我们将不胜感激!
更新
设法让它与答案一起工作,并用谷歌搜索找到这个线程,它提供了制作 zip 的额外步骤 https://laracasts.com/discuss/channels/vapor/zipping-file-on-laravel-vapor
您无权访问 lambda 上的本地文件存储,因为它是无服务器的。
在您的 config/filesystem.php
中创建一个新磁盘
'tmp' => [
'driver' => 'local',
'root' => env('USE_LAMBDA_STORAGE', true) ? "/tmp" : storage_path('app/temp'),
'url' => env('USE_LAMBDA_STORAGE', true) ? "/tmp" : storage_path('app/temp'),
],
使用 $disk = Storage::disk('tmp');
在此处创建 zip 文件。
所以我一直在尝试为此寻找解决方案,我认为这与我在存储上创建 zip 的方式有关。
控制器:
$disk = Storage::disk('s3');
if($disk->exists('storage/mail_attachments/'.$this->zip_file)) {
$disk->delete('storage/mail_attachments/'.$this->zip_file);
}
$zip = new \ZipArchive();
$zip->open($disk->put('storage/mail_attachments/'. $this->zip_file, ''), \ZipArchive::CREATE);
$download_file = file_get_contents(config('filesystems.disks.s3.url') . '/storage/mail_attachments/user_form_'.$this->uf_id.'.pdf');
$zip->addFromString(basename(config('filesystems.disks.s3.url') . '/storage/mail_attachments/user_form_'.$this->uf_id.'.pdf'), $download_file);
$zip->close();
我们将其托管在 Laravel vapor 上并在日志中看到:
ZipArchive::close(): Failure to create temporary file: Read-only file system
上面的代码设法创建了 zip 文件,但在查看时它是空的。使用 public_paths 创建 zip 效果很好。
如有任何帮助或建议,我们将不胜感激!
更新
设法让它与答案一起工作,并用谷歌搜索找到这个线程,它提供了制作 zip 的额外步骤 https://laracasts.com/discuss/channels/vapor/zipping-file-on-laravel-vapor
您无权访问 lambda 上的本地文件存储,因为它是无服务器的。
在您的 config/filesystem.php
'tmp' => [
'driver' => 'local',
'root' => env('USE_LAMBDA_STORAGE', true) ? "/tmp" : storage_path('app/temp'),
'url' => env('USE_LAMBDA_STORAGE', true) ? "/tmp" : storage_path('app/temp'),
],
使用 $disk = Storage::disk('tmp');
在此处创建 zip 文件。