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 desde una URL que fuerza la descarga con NodeJS

Estoy tratando de descargar un archivo PDF desde una API a un archivo local.

La forma en que lo estoy haciendo es mediante una llamada axios para el PDF.

Esta es mi solicitud:

const axiosInstance = createAxios();
const response = await axiosInstance.get('https://www.getpdf.com',
{
    headers: {
        responseType: 'arraybuffer'
    },
})

Aquí tienes parte de la respuesta que estoy obteniendo:

    %PDF-1.3
1 0 obj
[/PDF /Text /ImageB /ImageC /ImageI]
endobj
14 0 obj
<< /Length 3324 /Filter /FlateDecode >>
stream 
X   �[ms۸�ޙ���v� �\;�I���^.��}��t���h��D�$e���O܇>x!ڒ3�,�ϳ�]�o��_g4��&yF�4�4�{[���|�K�~ *IXшĒJ6|��59��    c���D�o{GD��<���'%'$�Hcn��9y���-ۢ������?��O����$H�/(J��'(�i�%�����#I?)噈()&p���ư9�,c��òxoQ)8��URb���q1��O��B)�[�%��RZ� VZ�z5n���x�:��1{��e'I�l����d'�2��B���(�E�4�����$iF%ޕ柋Uy��$���YI2F3q���TN�,���-�ju�S�itȔ&"�t�$�d���L��piL�ڴ�Qv��TzdD��$?v��IF#�į>�7e{�"�<��Q'T�x�vLj(�U�^�p�S���1 f/��%��8��@�kn�۪����qQ�Ne��Td�)��Z���j���W?_�9ěL��ě̥Nz'xK�V3��u�2�$Rj�ͺ('=�(�H�D4Wx'ϭ5�<�Zb3;�����mj���`ʒI"��c"(sۏg:*���44NIdRr�������e�oS����\4�����2íu��#�Y꒘&f۽�o�}T�aoG�8ɘ�,ۓ����F�{�=�P�M�#%�i.-W�X=y[.�ʮ
�%e�<��-��%�hf�UY��yFH�P`'ϰ>?I�]j�� ��W�UA~(ݦ#?]�n��    �">
�o�U]�[%�=@d�gy:�"FS뵚�#D�\�Sy� �'|"4=Y�����/���32a"f�E)�Rt�g�\*�]q$M$n�*��:��~qd���bH�P߄Go�D.�{�Rr�u���d|�a�̒�SgIt��rkMf�s�'���Ew���'q�҃"<��o|ڡ^pT��Pl��w���vY-����q69M[�۬����_���q

Ahora estoy tratando de guardar este archivo. He intentado todos los métodos que conozco:

fs.writeFileSync(__dirname+'/my.pdf', response.data);

o

fs.createWriteStream(__dirname+'/my.pdf').write(response.data);

o

fs.writeFile(__dirname+'/temp/my.pdf', response.data, 'binary', function (err) {
      console.log(err);
  });

o

fs.writeFile(__dirname+'/temp/my.pdf', response.data, 'base64', function (err) {
      console.log(err);
  });

El problema es que el PDF se guarda como un documento en blanco. Lo intenté en Postman y el archivo se guarda correctamente, así que sé que no es que la respuesta esté corrupta.

Realmente agradecería tu ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como has mencionado que la respuesta que estás recibiendo no está corrupta, el problema podría estar en la forma en que estás almacenando los datos de respuesta. Es posible que los datos no se estén almacenando en el formato o manera correcta, lo que está causando que obtengas un documento en blanco como resultado.

    Una forma de asegurar el almacenamiento correcto de los datos es usar la clase Buffer en Node.js. Puedes reemplazar tus métodos de almacenamiento con el siguiente código:

    const fs = require('fs');
    const buffer = Buffer.from(response.data, 'binary');
    fs.writeFileSync(__dirname+'/mi.pdf', buffer);
    

    Esto debería crear un archivo PDF en el formato correcto y evitar el problema de un documento en blanco. Además, asegúrate de que la ruta donde estás guardando el archivo PDF exista y sea accesible.

Comments are closed.