所以我一直在尝试找到一个解决方案,我认为这与我在存储上创建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蒸气上托管这个,并在日志中看到这个:
ZipArchive::close(): Failure to create temporary file: Read-only file system
上面的代码创建了zip文件,但在查看它时它是空的。使用public_path创建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文件。