node.js axios скачать файл и записать файл - PullRequest
0 голосов
/ 27 марта 2019

Я хочу скачать файл PDF с axios и сохранить на диске (на стороне сервера) с fs.writeFile, я попытался:

axios.get('https://xxx/my.pdf', {responseType: 'blob'}).then(response => {
    fs.writeFile('/temp/my.pdf', response.data, (err) => {
        if (err) throw err;
        console.log('The file has been saved!');
    });
});

файл сохранен, но содержимое повреждено ...

как правильно сохранить файл?

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Вы можете просто использовать response.data.pipe и fs.createWriteStream для передачи ответа на файл

axios({
    method: "get",
    url: "https://xxx/my.pdf",
    responseType: "stream"
}).then(function (response) {
    response.data.pipe(fs.createWriteStream("/temp/my.pdf"));
});
0 голосов
/ 27 марта 2019

узел fileSystem writeFile кодирует данные по умолчанию в UTF8.что может быть проблемой в вашем случае.

Попробуйте установить кодировку на null и пропустить кодировку полученных данных:

fs.writeFile('/temp/my.pdf', response.data, {encoding: 'null'}, (err) => {...}

вы также можете декальцировать кодирование в виде строки (вместоопций объекта), если вы объявляете только кодировку и никаких других опций.Строка будет обработана как значение кодирования.как таковой:

fs.writeFile('/temp/my.pdf', response.data, 'null', (err) => {...}

подробнее читайте в fileSystem API write_file

0 голосов
/ 27 марта 2019

Это мой пример кода с узлом js Ошибка синтаксиса

должно быть writeFile , а не WriteFile

const axios = require('axios');
const fs = require('fs');
axios.get('http://www.africau.edu/images/default/sample.pdf', {responseType: 'blob'}).then(response => {
  fs.writeFile('./my.pdf', response.data, (err) => {
        if (err) throw err;
        console.log('The file has been saved!');
    });
});

После сохранения файла он может выглядеть как в текстовом редакторе, но файл был сохранен правильно

%PDF-1.3
%����

1 0 obj
<<
/Type /Catalog
/Outlines 2 0 R
/Pages 3 0 R
>>
endobj

2 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj

3 0 obj
<<
/Type /Pages
/Count 2
/Kids [ 4 0 R 6 0 R ] 
>>
endobj
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...