✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Jak przesłać plik do S3 za pomocą systemu plików Laravel?

40

Niedawno opublikowałem artykuł Prześlij pliki do Amazon S3 za pomocą AWS PHP SDK. Jeden z naszych czytelników zapytał, jak wykonać operacje przesyłania plików AWS S3 za pomocą Laravela. Jeśli chodzi o Laravela, musimy podążać inną ścieżką niż PHP. W tym artykule dowiemy się, jak przesłać plik do S3 za pomocą systemu plików Laravel.

Laravel Filesystem zapewnia różne sterowniki do pracy z lokalnym systemem plików, Amazon S3, Rackspace itp. Sterowniki te zapewniają wygodny i łatwy sposób przesyłania plików lokalnie lub w chmurze.

Amazon S3 to popularna usługa do przechowywania obrazów, plików i dokumentów. Po drugie, przechowywanie plików w chmurze pozwoli zaoszczędzić dużo przepustowości dla Twojej witryny. Oszczędza miejsce na hostingu, a wydajność chmury jest skalowalna.

Powiedziawszy to, przyjrzyjmy się, jak przesłać plik do S3 za pomocą systemu plików Laravel.

Uzyskaj poświadczenia bezpieczeństwa AWS

Aby rozpocząć korzystanie z S3, powinieneś mieć konto w Amazon Web Services. Gdy już to zrobisz, upewnij się, że aktywujesz usługę S3.

Po aktywacji usługi S3 zdobądź swoje dane uwierzytelniające, których będziemy potrzebować w dalszej części samouczka.

Jak przesłać plik do S3 za pomocą systemu plików Laravel?

Konfiguracja sterownika S3 w Laravel

Jak powiedziałem, zamierzam używać systemu plików Laravel. Wymaga skonfigurowania sterownika S3. Udaj się do edytora i otwórz plik config/filesystems.php. W tym pliku możesz zobaczyć sterownik zdefiniowany dla S3 w ‘dyskach’.

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'),
        ],
 
    ],
];

W powyższym kodzie Laravel używa metody env() do ustawiania wartości. Oznacza to, że musisz zdefiniować te stałe w swoim .envpliku. Nie musisz definiować stałych AWS_URL i AWS_ENDPOINT, ponieważ nie jest to wymagane do przesyłania plików do zasobnika S3.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Dodaj wartość do każdej stałej powyżej. Następnie otwórz terminal w katalogu głównym projektu i uruchom polecenie:

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

To polecenie zainstaluje wymaganą bibliotekę, która wywołuje API AWS i wykonuje operacje w chmurze.

Prześlij plik do S3 w Laravel

Wszyscy ustawiamy się z podstawową konfiguracją. Teraz możemy przejść do właściwej części przesyłania plików. Stwórzmy prosty formularz z wejściem pliku i przyciskiem prześlij.

Dodaj poniższy kod do pliku ostrza.

<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>

Zastąp symbol zastępczy ROUTE_URL rzeczywistą trasą.

Laravel daje Storagefasadę, która służyła do interakcji ze skonfigurowanymi dyskami. W naszym przypadku dysk to S3. Dodaj Storagefasadę w kontrolerze w następujący sposób:

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

Po dodaniu fasady możesz przesyłać pliki na S3. Napisz poniższy kod w swojej metodzie, która wysyła plik na 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
    }
}

W powyższym kodzie generuję unikalną nazwę pliku, a następnie przesyłam go do S3. Użytkownik powinien przechowywać nazwę pliku w bazie danych do późniejszego wykorzystania. Podczas wgrywania pliku do S3 przekazałem trzeci parametr jako ‘public’. Jeśli nie chcesz ustawiać pliku jako ‘public’, pomiń ten parametr.

Użytkownik może uzyskać adres URL przesłanego pliku za pomocą kodu:

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

Aby usunąć plik z zasobnika S3, użyj metody usuwania, jak pokazano poniżej.

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

Chodzi o to, jak przesłać plik do S3 za pomocą systemu plików Laravel. Mam nadzieję, że dowiedziałeś się o systemie dostarczonym przez Laravel do interakcji z Amazon S3. Podziel się swoimi przemyśleniami i sugestiami w sekcji komentarzy poniżej.

Powiązane artykuły

Źródło nagrywania: artisansweb.net

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów