Laravel создает zip-файл с файлами в корзине s3

#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/…