Laravel 5 Dateidownloads: stream () oder download ()

9

Ich habe eine Laravel 5.4-App, bei der authentifizierte Benutzer private Dateien aus dem S3-Speicher herunterladen können. Ich habe eine Route und einen Controller eingerichtet, um das Herunterladen von privaten Dateien zu ermöglichen.

Der Code sieht so aus:

Route:

%Vor%

Controller:

%Vor%

Alles funktioniert gut, aber als ich mir die Laravel-Dokumente näher angesehen habe, habe ich das gefunden Sie reden nur von response()->download() .

Wenn ich diese Art von Antwort implementiere, würde mein Code wie folgt aussehen:

%Vor%

Beide Funktionen finden Sie in der API-Dokumentation .

Meine Frage: Was wäre der bevorzugte Weg und welche Vorteile / Nachteile hat jeder?

Von dem, was ich bisher gesammelt habe:

Stream:

  • Erfordert nicht, dass die gesamte Datei in den Speicher geladen wird
  • Geeignet für große Dateien

Download:

  • Benötigt weniger Code
Jones03 07.07.2017, 08:11
quelle

1 Antwort

1

Wenn Sie Laravel den Helfer response() aufrufen, wird eine Instanz von Illuminate\Routing\ResponseFactory zurückgegeben. Die ResponseFactory hat diese zwei Methoden: download und stream - die zwei Methoden in Frage. Wenn Sie etwas tiefer graben, sehen Sie, dass download eine Instanz von \Symfony\Component\HttpFoundation\BinaryFileResponse zurückgibt, während stream eine \Symfony\Component\HttpFoundation\StreamedResponse zurückgibt - dies sind beides Symfony-Komponenten.

Es ist nicht nötig, den Code hier zu durchforsten, aber es ist schön, zu verstehen, was unter der Haube passiert. Jetzt, da wir wissen, dass die zugrunde liegenden Objekte aus der Symfony-HTTP-Komponente stammen, können wir die Symfony-Dokumente konsultieren und sehen, was sie empfehlen. In der Regel werden Streams verwendet, wenn die Größe der Datei unbekannt ist, z. B. wenn Sie die Datei im laufenden Betrieb erstellen. In den meisten anderen Fällen ist die BinaryFileResponse , die von der Methode download generiert wird, für Ihre Bedürfnisse ausreichend.

Sie können sich eine ausführlichere Erklärung des HTTP-Streaming und seiner Anwendungsfälle hier ansehen.

    
samrap 09.01.2018 18:44
quelle

Tags und Links