Ich habe eine Laravel 5.4 App, wo authentifizierte Benutzer in der Lage sein müssen, private Dateien aus dem S3-Speicher herunterzuladen. Ich habe eine Route und einen Controller eingerichtet, um das Herunterladen von privaten Dateien zu ermöglichen.Laravel 5 Dateidownloads: stream() oder download()
Der Code sieht wie folgt aus:
Route:
Controller:
public function download($fileName)
{
if (!$fileName || !Storage::exists($fileName)) {
abort(404);
}
return response()->stream(function() use ($fileName) {
$stream = Storage::readStream($fileName);
fpassthru($stream);
if (is_resource($stream)) {
fclose($stream);
}
}, 200, [
'Cache-Control' => 'must-revalidate, post-check=0, pre-check=0',
'Content-Type' => Storage::mimeType($fileName),
'Content-Length' => Storage::size($fileName),
'Content-Disposition' => 'attachment; filename="' . basename($fileName) . '"',
'Pragma' => 'public',
]);
}
Alle arbeiten gut, aber wenn ich einen genaueren Blick auf die Laravel docs hatte, fand ich, dass Sie sprechen nur über response()->download()
.
Wenn ich diese Art von Antwort zu implementieren, würde mein Code wie folgt aussehen:
public function download($fileName)
{
if (!$fileName || !Storage::exists($fileName)) {
abort(404);
}
$file = Storage::get($fileName);
return response()->download($file, $fileName, [
'Content-Type' => Storage::mimeType($fileName),
]);
}
Beide Funktionen können im API docs finden.
Meine Frage: Was wäre der bevorzugte Weg zu gehen und was sind die Vorteile/Nachteile von jedem?
Von dem, was ich bisher gesammelt habe:
Stream:
- erfordert nicht die gesamte Datei
- Geeignet für große Dateien
Download:
- Benötigt weniger Code
Vielen Dank dafür! –
@ Jones03 finden Sie unter dieser Antwort https://Stackoverflow.com/a/24008078 – Qh0stM4N