Storing Files
Die put-Methode kann verwendet werden, um den Inhalt von Rohdaten auf einer Festplatte zu speichern. Sie können auch eine PHP-Ressource an die put-Methode übergeben, die dann Flysystems zugrunde liegende Stream-Unterstützung nutzt. Die Verwendung von Streams wird sehr empfohlen, wenn es sich um große Dateien handelt:
use Illuminate\Support\Facades\Storage;
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);
Automatic Streaming
Wenn Sie möchten, dass Laravel automatisch das Streaming einer bestimmten Datei an Ihren Speicherort verwaltet, können Sie die putFile oder putFileAs Methode verwenden. Diese Methode akzeptiert entweder eine Illuminate\Http\File oder Illuminate\Http\UploadedFile Instanz und wird die Datei automatisch an den gewünschten Speicherort streamen:
use Illuminate\Http\File;
use Illuminate\Support\Facades\Storage;
// Automatically generate a unique ID for file name...
Storage::putFile('photos', new File('/path/to/photo'));
// Manually specify a file name...
Storage::putFileAs('photos', new File('/path/to/photo'), 'photo.jpg');
Es gibt ein paar wichtige Dinge über die putFile-Methode zu beachten. Beachten Sie, dass wir nur einen Verzeichnisnamen, nicht aber einen Dateinamen angegeben haben. Standardmäßig generiert die putFile-Methode eine eindeutige ID, die als Dateiname dient. Die Dateierweiterung wird durch Untersuchung des MIME-Typs der Datei ermittelt. Der Pfad zu der Datei wird von der putFile-Methode zurückgegeben, so dass Sie den Pfad, einschließlich des generierten Dateinamens, in Ihrer Datenbank speichern können.
Die putFile- und putFileAs-Methoden akzeptieren auch ein Argument, um die "Sichtbarkeit" der gespeicherten Datei festzulegen. Dies ist besonders nützlich, wenn Sie die Datei auf einer Cloud-Disk wie z.B. S3 speichern und möchten, dass die Datei öffentlich zugänglich ist:
Storage::putFile('photos', new File('/path/to/photo'), 'public');
Prepending & Appending To Files
Die Prepend- und Append-Methoden erlauben es Ihnen, an den Anfang oder das Ende einer Datei zu schreiben:
Storage::prepend('file.log', 'Prepended Text');
Storage::append('file.log', 'Appended Text');
Copying & Moving Files
Die copy-Methode kann verwendet werden, um eine vorhandene Datei an einen neuen Ort auf der Festplatte zu kopieren, während die move-Methode verwendet werden kann, um eine vorhandene Datei umzubenennen oder an einen neuen Ort zu verschieben:
Storage::copy('old/file.jpg', 'new/file.jpg');
Storage::move('old/file.jpg', 'new/file.jpg');
File Uploads
In Webanwendungen ist einer der häufigsten Anwendungsfälle für die Speicherung von Dateien das Speichern von vom Benutzer hochgeladenen Dateien wie Profilbildern, Fotos und Dokumenten. Laravel macht es sehr einfach, hochgeladene Dateien mit der store-Methode auf einer hochgeladenen Dateiinstanz zu speichern. Rufen Sie die store-Methode mit dem Pfad auf, unter dem Sie die hochgeladene Datei speichern möchten:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserAvatarController extends Controller
{
/**
* Update the avatar for the user.
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars');
return $path;
}
}
Es gibt einige wichtige Dinge zu diesem Beispiel zu beachten. Beachten Sie, dass wir nur einen Verzeichnisnamen, nicht aber einen Dateinamen angegeben haben. Standardmäßig generiert die store-Methode eine eindeutige ID, die als Dateiname dient. Die Dateierweiterung wird durch Untersuchung des MIME-Typs der Datei ermittelt. Der Pfad zu der Datei wird von der store-Methode zurückgegeben, so dass Sie den Pfad, einschließlich des generierten Dateinamens, in Ihrer Datenbank speichern können.
Sie können auch die putFile-Methode auf der Storage-Fassade aufrufen, um die gleiche Dateibearbeitung wie im obigen Beispiel durchzuführen:
$path = Storage::putFile('avatars', $request->file('avatar'));
Specifying A File Name
Wenn Sie nicht möchten, dass Ihrer gespeicherten Datei automatisch ein Dateiname zugewiesen wird, können Sie die storeAs-Methode verwenden, die den Pfad, den Dateinamen und den (optionalen) Datenträger als Argumente erhält:
$path = $request->file('avatar')->storeAs(
'avatars', $request->user()->id
);
Sie können auch die putFileAs-Methode auf der Storage-Fassade verwenden, die die gleiche Dateimanipulation wie im obigen Beispiel durchführt:
$path = Storage::putFileAs(
'avatars', $request->file('avatar'), $request->user()->id
);
Nicht druckbare und ungültige Unicode-Zeichen werden automatisch aus den Dateipfaden entfernt. Daher möchten Sie vielleicht Ihre Dateipfade bereinigen, bevor Sie sie an Laravels Dateispeichermethoden übergeben. Dateipfade werden mit der Methode League\Flysystem\Util::normalizePath normalisiert.
Specifying A Disk
Standardmäßig wird diese Methode Ihre Standard-Diskette verwenden. Wenn Sie ein anderes Laufwerk angeben möchten, übergeben Sie den Laufwerksnamen als zweites Argument an die store-Methode:
$path = $request->file('avatar')->store(
'avatars/'.$request->user()->id, 's3'
);
File Visibility
In Laravel's Flysystem Integration ist "Sichtbarkeit" eine Abstraktion von Dateiberechtigungen über mehrere Plattformen hinweg. Dateien können entweder als public oder private deklariert werden. Wenn eine Datei als public deklariert wird, geben Sie damit an, dass die Datei generell für andere zugänglich sein soll. Wenn Sie z.B. den S3-Treiber verwenden, können Sie URLs für public Dateien abrufen.
Sie können die Sichtbarkeit beim Setzen der Datei über die put-Methode einstellen:
use Illuminate\Support\Facades\Storage;
Storage::put('file.jpg', $contents, 'public');
Wenn die Datei bereits gespeichert wurde, kann ihre Sichtbarkeit über die Methoden getVisibility und setVisibility abgerufen und eingestellt werden:
$visibility = Storage::getVisibility('file.jpg');
Storage::setVisibility('file.jpg', 'public')