#php #laravel #amazon-s3 #ziparchive
#php #laravel #amazon-s3 #архивирование
Вопрос:
Итак, я пытался найти решение для этого, и я думаю, что это связано с тем, как я создаю 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.
Любая помощь или совет будут оценены!
Обновить
Удалось заставить его работать с ответом и поискать в Google, чтобы найти этот поток, который дал дополнительные шаги для создания zip https://laracasts.com/discuss/channels/vapor/zipping-file-on-laravel-vapor
Ответ №1:
У вас нет доступа к локальному файловому хранилищу на 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'),
],
Создайте там zip-файл с помощью $disk = Storage::disk('tmp');
.
Комментарии:
1. Я попробовал это, и он все еще выдает ошибку. Я думаю, что Laravel vapor не разрешает доступ к storage_path .
2. Он не использует
storage_path
, когда вы устанавливаетеUSE_LAMBDA_STORAGE
значениеtrue
в переменных среды.3. Спасибо за это! Я следил за этой темой, которая помогла создать tmp zip-файла, а затем перенести его в корзину, в которой он мне нужен. laracasts.com/discuss/channels/vapor/…