Сохранение изображения с помощью fs.writeFile - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь сохранить изображение, используя файловую систему узла, полученную из https://picsum.photos/, но записываемый файл - это не то, чего я ожидаю.

const axios = require('axios');
const path = require('path');
const fs = require('file-system');

axios.get('https://picsum.photos/id/237/200/300')
  .then((data) => {
    fs.writeFile(path.resolve(__dirname, '../assets/test/test1.jpg'), data.data, (err) => {
      if (err) {
        console.log(err);
        throw err;
      }
      console.log('file save successfully');
    });
  })
  .catch((err) => {
    console.log(err);
  });

This is what the file results as

1 Ответ

0 голосов
/ 14 марта 2020

Данные, вероятно, возвращаются с неправильной кодировкой, поскольку ни одна не указана - скорее всего, в виде текста, а не в виде двоичного потока, поскольку responseType по умолчанию 'json'. Существует пример записи изображения на диск с помощью запроса ax ios для docs , в котором responseType имеет значение stream, а данный поток передается по каналу writeStream. Это, вероятно, тот подход, который вам понадобится.

Ниже приведен пример кода, приведенный в документации:

// GET request for remote image
axios({
  method: 'get',
  url: 'https://picsum.photos/id/237/200/300',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });

Если вы хотите использовать writeFile все же, вместо этого вы можете установить responseType: 'arraybuffer' и передать данный буфер в fs.writeFile.

...