如何从强制使用NodeJS下载的url下载文件



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

我做这件事的方式是用axios调用pdf。

这是我的请求:

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�&�����#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�ͺ(�g�'=�(�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

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

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正在保存为一个空白的白色文档。我在邮递员上试过了,文件保存得很好,所以我知道这并不是响应损坏。

非常感谢的帮助

您提供的链接不是指向.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);
});

最新更新