0

我正在尝试将 pdf 文件从 API 下载到本地文件

我这样做的方式是对pdf进行axios调用。

这是我的要求:

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

这是我得到的一些回应

    %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�&amp;�����#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#�į&gt;�7e{�&quot;�&lt;��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�ͺ(�g�'=�(�H�D4Wx'ϭ5�&lt;�Zb3;�����mj���`ʒI"��c"(sۏg&:*���44NIdRr�������e�oS����&4�����2íu��#�Y꒘&amp;f۽�o�}T�aoG�8ɘ�,ۓ����F�{�=�P�M�#%�i.-W�X=y[.�ʮ
�%e�&lt;��-��%�hf�UY��yFH�P`"ϰ>?I�]j�� ��W�UA~(ݦ#?]�n��   �&quot;���&gt;�
�o�U]�[%��=@d�gy:�&quot;FS뵚�#D�\�Sy� ��'|"�&quot;4=Y�����/���32a"f�E)�Rt�g�\*�]q$M$n�*��:��~qd���bH�P߄Go�D.�{�Rr�u���d|�a�̒�SgIt��rkMf�s�'���Ew���'q�҃&lt;��o|ڡ^pT��Pl��w���vY-����q69M[�۬����_���q

现在我正在尝试保存这个文件。我尝试了所有我喜欢的方法:

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

或者

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

或者

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

或者

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

问题是 PDF 保存为空白的白色文档。我在邮递员上尝试过,文件保存正确,所以我知道它不是响应已损坏。

真的很感激帮助

4

1 回答 1

0

您提供的链接不是.pdf文件,所以我以 VSCode 键盘快捷键为例。

我也没有直接使用 Axios,而是直接使用 Node.js 库。

此示例下载快捷方式 pdf 并在本地保存为output.pdf.

const fs = require('fs');
const https = require('https');


const url = 'https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf';

const output = fs.createWriteStream('output.pdf');
https.get( url, (res) => {
  // console.log('statusCode:', res.statusCode);
  // console.log('headers:', res.headers);

  res.pipe(output);

}).on('error', (e) => {
  console.error(e);
});

于 2021-12-10T05:44:52.037 回答