Hur laddar jag upp filen till S3 med Laravel Filesystem
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.
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 .env
fil. 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 Storage
fasad som brukade interagera med de konfigurerade diskarna. I vårt fall är skivan S3. Lägg till Storage
fasad 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
- En guide för att ladda upp och komprimera bilder i Laravel
- Hur man tar backup av Laravel Application
- Backup Laravel-applikation på Dropbox