Hola usuario de nuestra web, encontramos la respuesta a tu búsqueda, continúa leyendo y la obtendrás un poco más abajo.
Solución:
No hay magia, debes descargar la imagen externa usando copy()
función, luego envíelo al usuario en la respuesta:
$filename = 'temp-image.jpg';
$tempImage = tempnam(sys_get_temp_dir(), $filename);
copy('https://my-cdn.com/files/image.jpg', $tempImage);
return response()->download($tempImage, $filename);
TL;RD
Use la respuesta streamDownload si está usando 5.6 o superior. De lo contrario, implemente la función a continuación.
Respuesta Original
Muy similar a la respuesta de “descarga”, Laravel tiene una respuesta de “flujo” que se puede usar para hacer esto. En cuanto a la API, ambas funciones son contenedores de las clases BinaryFileResponse y StreamedResponse de Symfony. En los documentos de Symfony tienen buenos ejemplos de cómo crear una StreamedResponse
A continuación se muestra mi implementación usando Laravel:
stream(function ()
echo file_get_contents('http://google.co.uk');
);
$name = 'index.html';
$disposition = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$name,
str_replace('%', '', Str::ascii($name))
);
$response->headers->set('Content-Disposition', $disposition);
return $response;
);
Actualización 2018-01-17
Esto ahora se ha fusionado con Laravel 5.6 y se ha agregado a los documentos 5.6. La respuesta streamDownload se puede llamar así:
streamDownload(function ()
echo file_get_contents('https://my.remote.com/file/store-12345.jpg');
, 'nice-name.jpg');
);
En cuanto a 2020, todo esto es bastante fácil.
2 líneas de código para descargar a su servidor y 2 líneas para cargar al navegador (si es necesario).
Suponga que desea que un HTML para la página de inicio de Google se guarde localmente en su servidor y luego devuelva una respuesta HTTP para iniciar un navegador para descargar el archivo en la diapositiva del cliente:
// Load the file contents into a variable.
$contents = file_get_contents('www.google.com');
// Save the variable as `google.html` file onto
// your local drive, most probably at `your_laravel_project/storage/app/`
// path (as per default Laravel storage config)
Storage::disk('local')->put('google.html', $contents);
// -- Here your have savde the file from the URL
// -- to your local Laravel storage folder on your server.
// -- By default this is `your-laravel-project/storage/app` folder.
// Now, if desired, and if you are doing this within a web application's
// HTTP request (as opposite to CLI application)
// the file can be sent to the browser (client) with the response
// that instructs the browser to download the file at client side:
// Get the file path within you local filesystem
$path = Storage::url('google.html');
// Return HTTP response to a client that initiates the file downolad
return response()->download($path, $name, $headers);
Busque la documentación de la fachada de Laravel Storage para obtener detalles sobre la configuración del disco y put
método y respuesta con documentación de descarga de archivos para devolver un archivo con una respuesta HTTP.
Aquí tienes las comentarios y valoraciones
Recuerda que te brindamos la opción de añadir una puntuación correcta .