我正在尝试使用从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);
});
数据可能以错误的编码返回,因为未指定任何编码-最有可能以文本形式而不是以二进制流形式出现,因为默认情况下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
。