使用fs.writeFile保存图像

问题描述 投票:0回答:1

我正在尝试使用从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

node.js image axios fs
1个回答
0
投票

数据可能以错误的编码返回,因为未指定任何编码-最有可能以文本形式而不是以二进制流形式出现,因为默认情况下responseType'json'。有一个在docs上通过axios请求将映像写入磁盘的示例,其中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

© www.soinside.com 2019 - 2024. All rights reserved.