2015-03-25 10 views
6

Sto memorizzando i file per un sito su Rackspace usando Flysystem. Il caricamento non è un problema, avendo difficoltà a capire come avviare un download di un file - questo è quello che ho cercatoLaravel 5 Flysystem - scarica il file dal disco remoto

Storage::disk('rackspace'); 
return response()->download('file-library/' . $file->filename); 

Il risultato è che il file non è stato trovato. È sufficiente aggiungere Storage::disk() per far sì che Laravel guardi in questa posizione anziché localmente? Qual è il modo migliore per farlo?

risposta

-3

È sufficiente aggiungere Storage::disk() per far sì che Laravel guardi in questa posizione anziché localmente?

No, ciò non influisce sulle chiamate response()->download().

Qualcosa del genere dovrebbe funzionare:

return response()->download(Storage::disk('rackspace')->get('file-library/' . $file->filename)); 
+0

'is_file() si aspetta che il parametro 1 sia un percorso valido, stringa data'. Il primo parametro del download è un percorso (stringa) – NightMICU

+0

@NightMICU Potrebbe essere necessario trascinarlo in un file temporaneo, credo. O semplicemente collega l'utente direttamente alla memoria di Rackspace. – ceejayoz

+0

@ceeyaoz sembra strano che non avrebbero pensato a questo. Mi piacerebbe evitare di fare casino con i file temporanei (l'idea era di mantenere tutti i file di questo tipo fuori dal mio file system locale) e speravo di iniziare un download senza che l'utente lasciasse la pagina corrente. – NightMICU

18

Frank qui dal Flysystem.

Il modo migliore per farlo sarebbe utilizzare l'output readStream in combinazione con 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) . "\"", 
]); 

Il $fs è l'istanza League\Flysystem\Filesystem. Credo che ci sia un metodo per recuperare questa istanza nella classe del filesystem fornita da Laravel.

+0

Ciao Frank, grazie per questo - sarebbe possibile aggiornare con un esempio noto per funzionare in Laravel? Sono molto perso con l'istanza di Filesystem in relazione a Laravel – NightMICU

+0

l'ho aggiunto nella prima riga. –

+0

Posso confermare che questo funziona in Lumen, non vedo alcun motivo per cui non sarebbe in Laravel 5 –