Node.js中使用axios获取远程二进制文件后本地存储损坏问题求助
问题根源
axios默认会将响应数据按UTF-8编码转为字符串,二进制数据在该转码过程中会被不可逆损坏,后续使用Buffer.from(fileData.data, "binary")也无法还原原始文件内容。
修复方案
修改axios请求配置,明确指定响应类型为arraybuffer,拿到数据后直接写入文件即可,无需额外转码。
修正后的代码如下:
const fileData = await axios({ method: "get", url: instanceURL, headers: { "Authorization": "Bearer " + token, }, // 新增配置,指定返回原始二进制缓冲区 responseType: 'arraybuffer' }); fs.writeFileSync(storePath, fileData.data);
补充优化建议
- 大文件场景推荐使用流式响应减少内存占用,示例如下:
const { data: fileStream } = await axios({ method: "get", url: instanceURL, headers: { "Authorization": "Bearer " + token, }, responseType: 'stream' }); const writeStream = fs.createWriteStream(storePath); fileStream.pipe(writeStream); // 等待写入完成 await new Promise((resolve, reject) => { writeStream.on('finish', resolve); writeStream.on('error', reject); });
- 可对比写入后文件与服务端源文件的MD5/SHA值,确认文件内容完全一致。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

