es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo descargar un archivo en Js?

Estoy realizando una llamada a la API para exportar un archivo de Excel y la API está devolviendo la respuesta como un archivo zip codificado, como sigue:

PK-[Content_Types].xmlµSËnÂ0ü•È×*6ôPUCÇ©ô\{“Xø%¯¡ð÷]8”R‰
qòcfgfWöd¶q¶ZCB|ÃÆ|Ä*ð*h㻆},^ê{Va–^K<4lÈfÓÉb+ªõØ°>çø ªœD"xBÚœÌtLˆR-eâv4º*ø>×¹h°éä Z¹²¹zÜÝé†É­Q2S,±öúH´Þòvà`o"ÞUÏRÙµC(2q†Ãqa9SÝ
& ........... continúa .......

Por lo tanto, la respuesta anterior necesita convertirse en un archivo de Excel descargable.

Para esto, he utilizado el siguiente código:

const outputFilename = `${Date.now()}.xls`;
const url = URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', outputFilename);
document.body.appendChild(link);
link.click();

Genera un archivo de Excel, pero cuando abro el archivo, dice que el formato de archivo no es compatible.

¿Podrías ayudarme con los pasos para convertir los datos de respuesta en un archivo de Excel descargable real sin problemas?

Estoy utilizando una aplicación de ReactJS para la implementación.

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que los datos de respuesta son un archivo comprimido en formato zip que contiene el archivo de Excel. Aquí están los pasos que puedes seguir para convertir los datos de respuesta en un archivo de Excel descargable sin problemas:

    1. Decodifica los datos de respuesta utilizando una biblioteca adecuada como jszip o pako. Por ejemplo, utilizando jszip:
      const zip = new JSZip();
      zip.loadAsync(response.data).then((zip) => {
        const excelFile = zip.file('nombrearchivo.xlsx').async('arraybuffer');
        excelFile.then((data) => {
           const nombreArchivoSalida = `${Date.now()}.xlsx`;
           const url = URL.createObjectURL(new Blob([data]));
           const link = document.createElement('a');
           link.href = url;
           link.setAttribute('download', nombreArchivoSalida);
           document.body.appendChild(link);
           link.click();
        });
      });
      

      Aquí, reemplaza 'nombrearchivo.xlsx' con el nombre real del archivo de Excel dentro del zip.

    2. Utiliza la extensión de archivo adecuada para el archivo de Excel basándote en su formato real. Por ejemplo, si el formato real es xlsx, utiliza .xlsx como la extensión de archivo en el nombre de archivo de salida.

    3. Asegúrate de que los datos de respuesta no se modifiquen durante la transmisión, ya que cualquier modificación puede causar la corrupción del archivo de Excel. Añade encabezados apropiados en la respuesta de la API para garantizar la integridad de los datos.

Comments are closed.