Saltar al contenido

node.js axios descarga el flujo de archivos y escribe el archivo

Contamos con la mejor solución que descubrimos en línea. Deseamos que te resulte útil y si puedes aportar alguna mejora hazlo con total libertad.

Solución:

En realidad, creo que la respuesta previamente aceptada tiene algunas fallas, ya que no manejará el flujo de escritura correctamente, por lo que si llama “entonces ()” después de que Axios le haya dado la respuesta, terminará con un archivo parcialmente descargado.

Esta es una solución más apropiada cuando se descargan archivos un poco más grandes:

export async function downloadFile(fileUrl: string, outputLocationPath: string) 
  const writer = createWriteStream(outputLocationPath);

  return Axios(
    method: 'get',
    url: fileUrl,
    responseType: 'stream',
  ).then(response => 

    //ensure that the user can call `then()` only when the file has
    //been downloaded entirely.

    return new Promise((resolve, reject) => 
      response.data.pipe(writer);
      let error = null;
      writer.on('error', err => 
        error = err;
        writer.close();
        reject(err);
      );
      writer.on('close', () => 
        if (!error) 
          resolve(true);
        
        //no need to call the reject here, as it will have been called in the
        //'error' stream;
      );
    );
  );

De esta manera, puede llamar downloadFile()llamar then() en la promesa devuelta, y asegurándose de que el archivo descargado haya completado el procesamiento.

Simplemente puede usar response.data.pipe y fs.createWriteStream canalizar la respuesta al archivo

axios(
    method: "get",
    url: "https://xxx/my.pdf",
    responseType: "stream"
).then(function (response) 
    response.data.pipe(fs.createWriteStream("/temp/my.pdf"));
);

// This works perfectly well! 
const axios = require('axios'); 

axios.get('http://www.sclance.com/pngs/png-file-download/png_file_download_1057991.png', responseType: "stream" )  
.then(response =>   
// Saving file to working directory  
    response.data.pipe(fs.createWriteStream("todays_picture.png"));  
)  
    .catch(error =>   
    console.log(error);  
);  

Eres capaz de ayudar nuestra tarea poniendo un comentario y valorándolo te damos la bienvenida.

¡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 *