Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel 5 Flysystem - download file from remote disk

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?

like image 307
NightMICU Avatar asked Mar 25 '15 21:03

NightMICU


1 Answers

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.

like image 169
Frank de Jonge Avatar answered Nov 10 '22 19:11

Frank de Jonge