✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

So laden Sie eine Datei mit dem Laravel-Dateisystem auf S3 hoch

25

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.

So laden Sie eine Datei mit dem Laravel-Dateisystem auf S3 hoch

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 .envDatei 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 StorageFassade, die früher mit den konfigurierten Festplatten interagierte. In unserem Fall ist die Festplatte S3. Fügen Sie Storagein 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

Aufnahmequelle: artisansweb.net

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen