node.js - 使用axios配合Node获取图片jpg
问题描述
我正在尝试使用 axios 从另一个 Node 应用程序 [通过 Node http get request] 获取图片。问题是,当我使用 axios 时,我得到了错误的文件格式,当我保存它时,它看起来不像一张图片……当我使用 http get 时,我得到了一张完美的图片,并且保存得很好。
- 获取图片的工作代码:
收件人:
var data = new Stream.Transform();
res.on('data', function(chunk) {
console.log(typeof chunk)
data.push(chunk);
});
res.on('end', function() {
fs.writeFileSync('event.png', data.read());
});
发件人:
export const getImage = (req, res) => {
const pathToImage = 'C:/dev/server/images/event.jpg';
const img = fs.readFileSync(pathToImage);
res.writeHead(200, {'Content-Type': 'blob' });
res.end(img, 'binary');
}
- axios(不工作的代码):
axios.get(url)
.then((response: AxiosResponse)=>{
// save picture locally:
let data = new Stream.Transform();
data.push(response.data);
fs.writeFileSync('event.jpg', data.read());
})
.catch((error: AxiosError) => {
console.log(error.message);
})
有什么想法为什么 axios 不像 http 那样工作?
解决方案
明白了 - 这很简单:
const response = await axios({
url,
method: 'GET',
responseType: 'stream'
})
fs.writeFileSync('event.png', response.data.read());
推荐阅读
- javascript - Jquery 在提交表单之前检查单选按钮
- android - 缓慢的 signInAnonymously() 和 auth().currentUser.getIdToken()
- ios - 为用户位置显示闪烁的蓝点和 AnnotatationView
- java - 需要有关保存数组列表的更多详细信息
- ios - AudioKit:AKNodeOutputPlot 和 AKMicrophone 不工作,可能是由于生命周期或 MVVM 架构决定
- c - 当我的 fgets 输入超过指定的缓冲区大小时,我的(非常简单的)程序似乎表现出奇怪的行为
- c# - 如何强制 throw 成为语句而不是表达式(在 lambda 表达式中)?
- javascript - 使用非 ISO 标准日期格式的 MomentJs
- r - r中按商店级别的叉积计算
- apache - kill -28 和 apache 优雅停止的区别