问题
I am storing files for a site on Rackspace using Flysystem. Uploading is no problem, having trouble figuring out how to start a download for a file - this is what I have tried
Storage::disk('rackspace');
return response()->download('file-library/' . $file->filename);
The result is that the file could not be found. Is adding Storage::disk()
sufficient for making Laravel look in this location rather than locally? What is the best way to accomplish this?
回答1:
Frank here from Flysystem.
The preferred way to do this would be to use the readStream output in combination with Response::stream.
<?php
$fs = Storage::disk('diskname')->getDriver();
$stream = $fs->readStream($file);
return Response::stream(function() use($stream) {
fpassthru($stream);
}, 200, [
"Content-Type" => $fs->getMimetype($file),
"Content-Length" => $fs->getSize($file),
"Content-disposition" => "attachment; filename=\"" . basename($file) . "\"",
]);
The $fs
is the League\Flysystem\Filesystem
instance. I believe there is a method to retrieve this instance in the filesystem class Laravel provides.
回答2:
Is adding
Storage::disk()
sufficient for making Laravel look in this location rather than locally?
No, that wouldn't affect response()->download()
calls.
Something like this should work:
return response()->download(Storage::disk('rackspace')->get('file-library/' . $file->filename));
来源:https://stackoverflow.com/questions/29266974/laravel-5-flysystem-download-file-from-remote-disk