我在这里遇到问题。
让我们从拥有API开始,此API返回带有下一个标头的数据:
Content-Type image/png
Transfer-Encoding chunked
Connection keep-alive
只有文件所在的响应正文。
当我尝试将此正文数据写入文件时-它总是坏了。我的意思是我已经有了二进制数据,他的mime,body.length与原始文件大小匹配,但是保存该图像后无法在任何查看器中打开该图像。
我在做什么:
public userFile(req, res: Response) {
const data = {
fileId: parseInt(req.body.fileId),
};
let params = {
headers: {
'Authorization': keys.token,
},
};
axios.post('/api/getfile/', data, params,)
.then((response: AxiosResponse) => {
const fs = require('fs');
const dir = require('path').resolve(__dirname + '../../../files/storage');
const ext = {
'image/png': '.png'
};
fs.writeFile(dir + '/' + img + ext[response.headers['content-type']], response.data, (er) => {
res.send(response.data);
});
})
.catch((err) => {
logger.error("AXIOS ERROR: ", err)
})
}
但是!当我通过邮递员获得此文件时...就在这里! 所以,我需要您的帮助-我做错了什么?
答案 0 :(得分:1)
您必须在参数中明确声明它是哪种响应类型
responseType: 'stream'
然后使用管道将流保存到文件
response.data.pipe(fs.createWriteStream("/dir/xyz.png"))