read from delete php laravel laravel-4 laravel-routing

php - from - response helper laravel



Descargar archivos en laravel usando Response:: descargar (7)

En la aplicación Laravel estoy tratando de lograr un botón dentro de la vista que pueda permitir al usuario descargar el archivo sin navegar a ninguna otra vista o ruta. Ahora tengo dos problemas: (1) debajo de la función de arrojar

The file "/public/download/info.pdf" does not exist

(2) El botón Descargar no debe desplazar al usuario a ninguna parte y solo descargar archivos en una misma vista, Mi configuración actual, enrutar una vista para ''descargar''

Así es como estoy tratando de lograr:

Botón:

<a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>

Ruta:

Route::get(''/download'', ''HomeController@getDownload'');

Controlador :

public function getDownload(){ //PDF file is stored under project/public/download/info.pdf $file="./download/info.pdf"; return Response::download($file); }


// Intenta esto para descargar cualquier archivo. laravel 5. *

// necesita usar la fachada "use Illuminate / Http / Response";

public function getDownload() { //PDF file is stored under project/public/download/info.pdf $file= public_path(). "/download/info.pdf"; return response()->download($file); }


Algunas de estas soluciones sugieren hacer referencia a public_path () de la aplicación Laravel para ubicar el archivo. Algunas veces querrá controlar el acceso al archivo u ofrecer una monitorización en tiempo real del archivo. En este caso, querrá mantener el directorio privado y limitar el acceso mediante un método en una clase de controlador. El siguiente método debería ayudar con esto:

public function show(Request $request, File $file) { // Perform validation/authentication/auditing logic on the request // Fire off any events or notifiations (if applicable) return response()->download(storage_path(''app/'' . $file->location)); }

Existen otros caminos que también podría usar, descritos en la documentación de las funciones auxiliares de Laravel.


Creo que puedes usar

$file= public_path(). "/download/info.pdf"; $headers = array( ''Content-Type: '' . mime_content_type( $file ), );

Con esto, puedes estar seguro de que es un pdf.


En la respuesta aceptada, para Laravel 4 el conjunto de encabezados está incorrectamente construido. Utilizar:

$headers = array( ''Content-Type'' => ''application/pdf'', );


Las descargas de archivos son súper simples en Laravel 5 .

Como @Ashwani mencionó, Laravel 5 permite descargas de archivos con response()->download() para devolver el archivo para su descarga. Ya no necesitamos meternos con ningún encabezado. Para devolver un archivo simplemente:

return response()->download(public_path(''file_path/from_public_dir.pdf''));

desde dentro del controlador.

Ruta de descarga / controlador reutilizable

Ahora hagamos una ruta de descarga de archivos reutilizable y un controlador para que podamos server cualquier archivo en nuestro directorio public/files .

Crea el controlador:

php artisan make:controller --plain DownloadsController

Crea la ruta en la app/Http/routes.php :

Route::get(''/download/{file}'', ''DownloadsController@download'');

Hacer el método de descarga en la app/Http/Controllers/DownloadsController :

class DownloadsController extends Controller { public function download($file_name) { $file_path = public_path(''files/''.$file_name); return response()->download($file_path); } }

Ahora simplemente suelta algunos archivos en el directorio public/files y puede /download/filename.ext al enlazar a /download/filename.ext :

<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"

Si seleccionó el paquete Html de Laravel Collective, puede usar la fachada Html:

{!! Html::link(''download/filename.ext'', ''File Name'') !!}


Mientras usa laravel 5 use este código ya que no necesita encabezados.

return response()->download($pathToFile); .

Si está utilizando Fileentry , puede utilizar la siguiente función para descargar.

// download file public function download($fileId){ $entry = Fileentry::where(''file_id'', ''='', $fileId)->firstOrFail(); $pathToFile=storage_path()."/app/".$entry->filename; return response()->download($pathToFile); }


Prueba esto.

public function getDownload() { //PDF file is stored under project/public/download/info.pdf $file= public_path(). "/download/info.pdf"; $headers = array( ''Content-Type: application/pdf'', ); return Response::download($file, ''filename.pdf'', $headers); }

"./download/info.pdf" no funcionará ya que tiene que dar una ruta física completa.

Actualización 20/05/2016

Laravel 5, 5.1, 5.2 o 5. * los usuarios pueden usar el siguiente método en lugar de Response Fachada. Sin embargo, mi respuesta anterior funcionará tanto para Laravel 4 como para 5. (la estructura del array $header cambia a array asociativo => - los dos puntos después de que se eliminó ''Content-Type'' - si no hacemos esos cambios, los encabezados serán agregado de manera incorrecta: el nombre del encabezado será el número iniciado a partir de 0,1, ...)

$headers = [ ''Content-Type'' => ''application/pdf'', ]; return response()->download($file, ''filename.pdf'', $headers);