Постараюсь ответить на этот вопрос. Итак, есть два способа сделать это:
Вы отправляете предварительно подписанный URL-адрес клиенту Frontend и позволяете им загружать файл напрямую в S3, а после загрузки они уведомляют ваш сервер о то же самое.
Вы получаете файл прямо на сервер и загружаете его на S3, в этом случае вам не понадобится предварительно подписанный URL, поскольку вы уже настроили доступ AWS внутри проекта.
Поскольку решение 1 говорит само за себя, я попытаюсь объяснить решение 2.
Laravel предоставляет Storage
Facade для обработки операций файловой системы. Он следует философии нескольких драйверов - Public
, Local Disk
, Amazon S3
, FTP
плюс возможность расширения драйвера.
Шаг 1. Настройте файл .env с помощью ключей AWS, вам потребуются следующие значения, чтобы начать использовать Amazon S3
в качестве драйвера:
- AWS Key
- AWS Secret
- AWS Bucket Name
- AWS Область сегмента
Шаг 2: Предполагается, что у вас уже есть файл, загруженный на ваш сервер. Теперь мы загрузим файл на S3 с нашего сервера.
Если вы указали s3
в качестве диска по умолчанию, следующий фрагмент выполнит загрузку за вас:
Storage::put('avatars/1', $fileContents);
Если вы вы используете несколько дисков, вы можете загрузить файл:
Storage::disk('s3')->put('avatars/1', $fileContents);
Готово! Теперь ваш файл загружен в корзину S3. Еще раз проверьте его внутри вашего ведра S3.
Если вы используете sh, чтобы узнать больше о Laravel Хранилище, щелкните здесь .