WEB и WordPress новости, темы, плагины. Здесь мы делимся советами и лучшими решениями для сайтов.

Как загрузить файл на S3 с помощью файловой системы Laravel

849

Недавно я опубликовал статью «Загрузка файлов в Amazon S3 с помощью AWS PHP SDK». Один из наших читателей спросил, как выполнять операции загрузки файлов AWS S3 с помощью Laravel. Когда дело доходит до Laravel, нам нужно идти другим путем по сравнению с PHP. В этой статье мы изучаем, как загрузить файл в S3 с помощью файловой системы Laravel.

Файловая система Laravel предоставляет различные драйверы для работы с локальной файловой системой, Amazon S3, Rackspace и т.д. Эти драйверы обеспечивают удобный и простой способ загрузки файлов локально или в облако.

Amazon S3 – популярный сервис для хранения изображений, файлов и документов. Во-вторых, хранение файлов в облаке позволит сэкономить много трафика для вашего сайта. Это экономит место на вашем хостинге, а производительность облака масштабируется.

Сказав это, давайте посмотрим, как загрузить файл на S3 с помощью файловой системы Laravel.

Получите свои учетные данные для обеспечения безопасности AWS

Чтобы начать работу с S3, у вас должна быть учетная запись в Amazon Web Services. Получив его, не забудьте активировать службу S3.

После активации службы S3 получите свои учетные данные безопасности, которые нам понадобятся в более поздней части руководства.

Как загрузить файл на S3 с помощью файловой системы Laravel

S3 Driver Configuration in Laravel

Как было сказано, я собираюсь использовать файловую систему Laravel. Требуется настройка драйвера S3. Перейдите в свой редактор и откройте файл config/filesystems.php. В этом файле вы можете увидеть драйвер, определенный для S3 в разделе «диски».

config / filesystems.php

<?php
 
return [
 
    .....
 
    'disks' => [
 
        .....
 
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
        ],
 
    ],
];

В приведенном выше коде Laravel использует метод env() для установки значений. Это означает, что вам необходимо определить эти константы в вашем .envфайле. Вам не нужно определять константы AWS_URL и AWS_ENDPOINT, поскольку это не требуется для загрузки файлов в корзину S3.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Добавьте значение к каждой приведенной выше константе. Затем откройте терминал в корневом каталоге вашего проекта и выполните команду:

composer require league/flysystem-aws-s3-v3 ~1.0

Эта команда установит необходимую библиотеку, которая вызывает API AWS и выполняет облачные операции.

Загрузите файл в S3 в Laravel

Мы все установили в базовой конфигурации. Теперь мы можем перейти к самой части загрузки файла. Создадим простую форму с вводом файла и кнопкой отправки.

Добавьте приведенный ниже код в свой файл лезвия.

<form action="{{ url('ROUTE_URL') }}" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <label for="exampleInputFile">File input</label>
        <input type="file" name="profile_image" id="exampleInputFile">
    </div>
    {{ csrf_field() }}
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Замените заполнитель ROUTE_URL своим фактическим маршрутом.

Laravel предоставляет Storageфасад, который используется для взаимодействия с настроенными дисками. В нашем случае это диск S3. Добавьте Storageфасад в контроллер следующим образом:

<?php
 
namespace AppHttpControllers;
 
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
...
...

После включения фасада вы можете загружать файлы на S3. Напишите приведенный ниже код в свой метод, который отправляет файл на S3.

<?php
...
...
public function store(Request $request)
{
    if($request->hasFile('profile_image')) {
 
        //get filename with extension
        $filenamewithextension = $request->file('profile_image')->getClientOriginalName();
 
        //get filename without extension
        $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);
 
        //get file extension
        $extension = $request->file('profile_image')->getClientOriginalExtension();
 
        //filename to store
        $filenametostore = $filename.'_'.time().'.'.$extension;
 
        //Upload File to s3
        Storage::disk('s3')->put($filenametostore, fopen($request->file('profile_image'), 'r+'), 'public');
 
        //Store $filenametostore in the database
    }
}

В приведенном выше коде я генерирую уникальное имя для файла, а затем загружаю его в S3. Пользователь должен сохранить имя файла в базе данных для дальнейшего использования. При загрузке файла на S3 я передал третий параметр как «общедоступный». Если вы не хотите делать файл общедоступным, пропустите этот параметр.

Пользователь может получить URL-адрес загруженного файла, используя код:

$url = Storage::disk('s3')->url('YOUR_FILENAME_HERE');

Для удаления файла из корзины S3 используйте метод удаления, как показано ниже.

Storage::disk('s3')->delete('YOUR_FILENAME_HERE');

Все дело в том, как загрузить файл на S3 с помощью файловой системы Laravel. Надеюсь, вы узнали о системе, предоставляемой Laravel для взаимодействия с Amazon S3. Пожалуйста, поделитесь своими мыслями и предложениями в разделе комментариев ниже.

Статьи по Теме

Источник записи: artisansweb.net

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее