✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Hur laddar jag upp filen till S3 med Laravel Filesystem

24

Nyligen har jag publicerat en artikel Ladda upp filer till Amazon S3 med AWS PHP SDK. En av våra läsare frågade hur man utför AWS S3-uppladdningsfiloperationer med Laravel. När det gäller Laravel måste vi följa ett annat spår jämfört med PHP. I den här artikeln studerar vi hur man laddar upp en fil till S3 med ett Laravel-filsystem.

Laravel Filesystem erbjuder olika drivrutiner för att arbeta med lokalt filsystem, Amazon S3, Rackspace, etc. Dessa drivrutiner är ett bekvämt och enkelt sätt att ladda upp filer lokalt eller i molnet.

Amazon S3 är en populär tjänst för lagring av bilder, filer och dokument. För det andra sparar du mycket bandbredd för din webbplats om du håller dina filer i molnet. Det sparar ditt värdutrymme plus molnprestanda är skalbar.

Med detta sagt, låt oss ta en titt på hur man laddar upp en fil till S3 med Laravel Filesystem.

Få dina AWS-säkerhetsuppgifter

För att komma igång med S3 bör du ha ett konto på Amazon Web Services. När du har det, se till att aktivera S3-tjänsten.

Efter att du har aktiverat S3-tjänsten får du dina säkerhetsuppgifter som vi behöver i den senare delen av handledningen.

Hur laddar jag upp filen till S3 med Laravel Filesystem

S3 Driver Configuration i Laravel

Som sagt ska jag använda Laravel Filesystem. Det kräver konfigurering av S3-drivrutinen. Gå till din redaktör och öppna filen config/filesystems.php. I den här filen kan du se drivrutinen definierad för S3 under ‘diskar’.

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

I ovanstående kod använder Laravel metoden env() för att ställa in värdena. Det betyder att du måste definiera dessa konstanter i din .envfil. Du behöver inte definiera AWS_URL- och AWS_ENDPOINT-konstanter, eftersom det inte krävs för att ladda upp filer på S3-skopan.

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=

Lägg till värdet till varje konstant ovan. Öppna sedan terminalen i din projektkatalog och kör kommandot:

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

Detta kommando installerar det önskade biblioteket som ringer till AWS API och utför molnoperationerna.

Ladda upp en fil till S3 i Laravel

Vi ställer alla in med den grundläggande konfigurationen. Nu kan vi gå till den faktiska delen av filöverföringen. Låt oss skapa ett enkelt formulär med filinmatning och skicka-knapp.

Lägg till koden nedan i din bladfil.

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

Byt ut platshållaren ROUTE_URL mot din faktiska rutt.

Laravel ger en Storagefasad som brukade interagera med de konfigurerade diskarna. I vårt fall är skivan S3. Lägg till Storagefasad i styrenheten enligt följande:

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

Efter att ha inkluderat en fasad kan du ladda upp filer på S3. Skriv koden nedan i din metod som skickar filen på 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
    }
}

I ovanstående kod genererar jag ett unikt namn för filen och laddar sedan upp den till S3. En användare bör lagra filnamnet i databasen för senare användning. När jag laddade upp en fil till S3 skickade jag den tredje parametern som "offentlig". Om du inte vill ställa in filen som ‘offentlig’, hoppa över den här parametern.

Användaren kan hämta webbadressen till den uppladdade filen med koden:

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

För att radera en fil från S3-skopan, använd raderingsmetoden som visas nedan.

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

Det handlar om hur man laddar upp en fil till S3 med Laravel Filesystem. Jag hoppas att du fick veta om det system som tillhandahålls av Laravel för interaktion med Amazon S3. Dela dina tankar och förslag i kommentarsektionen nedan.

relaterade artiklar

Inspelningskälla: artisansweb.net

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer