मेरे पास एक लार्वा 5.4 ऐप है जहां प्रमाणीकृत उपयोगकर्ताओं को एस 3 स्टोरेज से निजी फाइलें डाउनलोड करने में सक्षम होना चाहिए। मैंने निजी फ़ाइल डाउनलोड की अनुमति देने के लिए एक मार्ग और नियंत्रक स्थापित किया है।लार्वेल 5 फ़ाइल डाउनलोड: स्ट्रीम() या डाउनलोड()
कोड इस तरह दिखता है:
रूट:
नियंत्रक:
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',
]);
}
सभी ठीक काम कर रहा है, लेकिन जब मैं Laravel docs को करीब से देखने के लिए किया था, मुझे लगता है कि पाया वे बस response()->download()
के बारे में बात करते हैं।
अगर मैं प्रतिक्रिया उस तरह लागू, मेरे कोड इस तरह दिखेगा:
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),
]);
}
दोनों कार्यों API docs में पाया जा सकता।
मेरा प्रश्न: जाने का पसंदीदा तरीका क्या होगा और प्रत्येक के फायदे/नुकसान क्या हैं?
मैं अब तक क्या एकत्रित की हैं से:
स्ट्रीम:
- पूरी फ़ाइल की आवश्यकता नहीं है स्मृति में लोड करने के लिए
- बड़ी फ़ाइलों
डाउनलोड:
- कम कोड आवश्यक है
इसके लिए धन्यवाद! –
@ jones03 इस उत्तर को देखें https://stackoverflow.com/a/24008078 – Qh0stM4N