2017-01-02 11 views
12

Generuję plik CSV i chcę, aby Laravel wymuszał jego pobieranie, ale tylko the documentation wspomina o tym, że mogę pobierać pliki, które już istnieją na serwerze, i chcesz to zrobić bez zapisywania danych jako pliku.Laravel: Wymuszenie pobrania ciągu bez konieczności tworzenia pliku

Udało mi się to zrobić (co działa), ale chciałem się dowiedzieć, czy był inny, lepszy sposób.

$headers = [ 
     'Content-type'  => 'text/csv', 
     'Content-Disposition' => 'attachment; filename="download.csv"', 
    ]; 
    return \Response::make($content, 200, $headers); 

Próbowałem też z SplTempFileObject(), ale mam następujący błąd: The file "php://temp" does not exist

$tmpFile = new \SplTempFileObject(); 
    $tmpFile->fwrite($content); 

    return response()->download($tmpFile); 
+1

podejścia usposobienie zawartości jest najczystszym sposobem –

+0

Dzięki! Naprawdę chciałbym wiedzieć, czy jest jakiś powód, dla którego nie ma w tym żadnej wbudowanej funkcji. –

Odpowiedz

18

dokonać response macro dla czystszego treści usposobienie/laravel podejście

Dodaj następujące elementy do swojego App\Providers\AppServiceProvider bagażnika metoda

\Response::macro('attachment', function ($content) { 

    $headers = [ 
     'Content-type'  => 'text/csv', 
     'Content-Disposition' => 'attachment; filename="download.csv"', 
    ]; 

    return \Response::make($content, 200, $headers); 

}); 

następnie w kontrolerze i trasy można powrócić następujące

return response()->attachment($content); 
-2

Spróbuj tego:

// Directory file csv, You can use "public_path()" if the file is in the public folder 
$file= public_path(). "/download.csv"; 
$headers = ['Content-Type: text/csv']; 

//L4 
return Response::download($file, 'filename.csv', $headers); 
//L5 or Higher 
return response()->download($file, 'filename.csv', $headers); 
+0

Przepraszam, ale chciałem sposobu, który nie zmusiłby mnie do wcześniejszego zapisania pliku. –

Powiązane problemy