So laden Sie eine Datei mit dem Laravel-Dateisystem auf S3 hoch
Vor kurzem habe ich einen Artikel zum Hochladen von Dateien in Amazon S3 mit AWS PHP SDK veröffentlicht. Einer unserer Leser fragte, wie man mit Laravel AWS S3-Upload-Dateioperationen durchführt. Bei Laravel müssen wir im Vergleich zu PHP einen anderen Weg einschlagen. In diesem Artikel untersuchen wir, wie Sie mit einem Laravel-Dateisystem eine Datei auf S3 hochladen.
Laravel Filesystem bietet verschiedene Treiber für die Arbeit mit dem lokalen Dateisystem, Amazon S3, Rackspace usw. Diese Treiber bieten eine bequeme und einfache Möglichkeit, Dateien lokal oder in die Cloud hochzuladen.
Amazon S3 ist ein beliebter Dienst zum Speichern von Bildern, Dateien und Dokumenten. Zweitens spart die Speicherung Ihrer Dateien in der Cloud viel Bandbreite für Ihre Website. Es spart Ihren Hosting-Speicherplatz und die Cloud-Leistung ist skalierbar.
Lassen Sie uns jedoch einen Blick darauf werfen, wie Sie eine Datei mit dem Laravel-Dateisystem auf S3 hochladen.
Holen Sie sich Ihre AWS-Sicherheitsanmeldeinformationen
Um mit S3 zu beginnen, sollten Sie ein Konto bei Amazon Web Services haben. Sobald Sie es haben, stellen Sie sicher, dass Sie den S3-Dienst aktivieren.
Rufen Sie nach der Aktivierung des S3-Dienstes Ihre Sicherheitsanmeldeinformationen ab, die wir im späteren Teil des Tutorials benötigen.
S3-Treiberkonfiguration in Laravel
Wie gesagt, ich werde das Laravel-Dateisystem verwenden. Es erfordert die Konfiguration des S3-Treibers. Gehen Sie zu Ihrem Editor und öffnen Sie die Datei config/filesystems.php
. In dieser Datei sehen Sie den für S3 definierten Treiber unter ‘disks’.
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'),
],
],
];
Im obigen Code verwendet Laravel die Methode env(), um die Werte zu setzen. Das bedeutet, dass Sie diese Konstanten in Ihrer .env
Datei definieren müssen. Sie müssen die Konstanten AWS_URL und AWS_ENDPOINT nicht definieren, da dies zum Hochladen von Dateien in den S3-Bucket nicht erforderlich ist.
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=
AWS_BUCKET=
Addieren Sie den Wert zu jeder der obigen Konstanten. Öffnen Sie als Nächstes das Terminal in Ihrem Projektstammverzeichnis und führen Sie den Befehl aus:
composer require league/flysystem-aws-s3-v3 ~1.0
Dieser Befehl installiert die erforderliche Bibliothek, die die AWS-API aufruft und die Cloud-Operationen ausführt.
Hochladen einer Datei auf S3 in Laravel
Wir haben alle mit der Grundkonfiguration eingestellt. Jetzt können wir mit dem eigentlichen Teil des Datei-Uploads beginnen. Lassen Sie uns ein einfaches Formular mit Dateieingabe und Senden-Schaltfläche erstellen.
Fügen Sie den folgenden Code in Ihre Blade-Datei ein.
<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>
Ersetzen Sie den Platzhalter ROUTE_URL durch Ihre tatsächliche Route.
Laravel gibt eine Storage
Fassade, die früher mit den konfigurierten Festplatten interagierte. In unserem Fall ist die Festplatte S3. Fügen Sie Storage
in der Steuerung Fassade wie folgt:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateSupportFacadesStorage;
...
...
Nach dem Einbinden einer Fassade können Sie Dateien auf S3 hochladen. Schreiben Sie den folgenden Code in Ihre Methode, die die Datei auf S3 sendet.
<?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
}
}
Im obigen Code erzeuge ich einen eindeutigen Namen für die Datei und lade sie dann auf S3 hoch. Ein Benutzer sollte den Dateinamen zur späteren Verwendung in der Datenbank speichern. Beim Hochladen einer Datei auf S3 habe ich den dritten Parameter als ‘public’ übergeben. Wenn Sie die Datei nicht als ‘öffentlich’ festlegen möchten, überspringen Sie diesen Parameter.
Der Benutzer kann die URL der hochgeladenen Datei mit dem folgenden Code abrufen:
$url = Storage::disk('s3')->url('YOUR_FILENAME_HERE');
Verwenden Sie zum Löschen einer Datei aus dem S3-Bucket die unten gezeigte Löschmethode.
Storage::disk('s3')->delete('YOUR_FILENAME_HERE');
Es dreht sich alles darum, wie Sie eine Datei mit dem Laravel-Dateisystem auf S3 hochladen. Ich hoffe, Sie haben das von Laravel bereitgestellte System für die Interaktion mit dem Amazon S3 kennengelernt. Bitte teilen Sie Ihre Gedanken und Vorschläge im Kommentarbereich unten mit.
Zum Thema passende Artikel
- Eine Anleitung zum Hochladen und Komprimieren von Bildern in Laravel
- So erstellen Sie ein Backup der Laravel-Anwendung
- Backup der Laravel-Anwendung auf Dropbox