Как извлечь файлы из S3 в Laravel Vapor - PullRequest
0 голосов
/ 06 января 2020

У меня проблема с загрузкой изображений в мой html динамически после успешного их сохранения с Laravel Vapor.

Я следовал этой документации, предоставленной laravel steam хранить файлы, и это работает как шарм. Я копирую свои загруженные файлы из каталога tmp в root моего сегмента S3, а затем сохраняю путь к этому файлу в моей таблице изображений базы данных, чтобы позже я мог вернуть путь к файлу во внешний интерфейс и отобразить изображение в моем браузер.

К сожалению, это всегда возвращает код состояния 403 от AWS S3.

Я мог бы исправить это, сделав мой сгенерированный контейнер S3 опубликованным c, но это подняло бы проблему безопасности. Я считаю, что это должно работать из коробки, не знаю, где я мог пойти не так ... какие-либо идеи?

Я возвращаю URL загруженного изображения, используя фасад хранилища.

use Illuminate\Support\Facades\Storage;    

return Storage::url($image->path);

Где $image->path - это путь к файлу в моей корзине S3.

Я уверен, что фасад хранилища работает правильно, потому что он возвращает правильный URL с путем к файлу.

1 Ответ

1 голос
/ 06 января 2020

Я получил решение этой проблемы. Я связался с laravel Служба поддержки паров, и мне сказали установить свойство видимости для моего файла на publi c, когда я копирую его в постоянное местоположение, как указано в официальной документации Laravel здесь .

Поэтому после загрузки файла с помощью метода js steam.store его необходимо скопировать в постоянный каталог, а затем установить его видимость publi c.

Storage::copy($request->path, str_replace('tmp/', '', $request->path));
Storage::setVisibility(str_replace('tmp/', '', $request->path), 'public');

. Я также заметил, что вы можете установить видимость файла непосредственно в методеapor.store, передав атрибут видимости с соответствующим значением.

vapor.store(file, { visibility: 'public-read' });

В качестве примечания: просто 'publi c' вернет 400 неверных запросов, для них должно быть установлено значение publi c -read.

...