如何解决Laravel 使用 s3 存储桶上的文件创建 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',],
使用 $disk = Storage::disk('tmp');
在那里创建 zip 文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。