Saltar al contenido

Descargue un archivo en Laravel usando una URL a un recurso externo

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 .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *