✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як завантажити файл на S3 за допомогою файлової системи Laravel

20

Нещодавно я опублікував статтю Завантажити файли на 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, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі