You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Javascript服务端传Excel到客户端后XLSX.read读取结果异常求助

问题原因及修复方案

问题核心是二进制Excel文件在传输过程中被错误编码损坏,对应两处错误需要修正:

1. 服务端返回逻辑错误

你使用res.json()返回二进制Buffer的方式完全错误:res.json()会自动将Node.js Buffer序列化为JSON格式的字节数组,同时设置响应头为application/json,直接破坏原始二进制文件结构。

修正后的服务端代码:

let filename = 'test_download.xlsx';
const buffer = fs.readFileSync(filename)
// 配置Excel文件对应的响应头
res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
res.setHeader('Content-Disposition', `attachment; filename=${encodeURIComponent(filename)}`);
// 直接返回原始Buffer,不要做JSON序列化
res.send(buffer);

2. 客户端请求配置错误

axios默认会将响应内容按UTF-8文本或JSON格式解析,接收二进制文件必须显式指定响应类型为arraybuffer,否则同样会损坏二进制数据。

修正后的客户端代码:

// 请求时添加responseType配置
const file = await axios.get('/dataexplorer/test', {
  responseType: 'arraybuffer'
});
console.log(file);
// 直接传入解析后的arraybuffer即可
console.log(XLSX.read(file.data, {type: "buffer"}));

原逻辑失效说明

你原来的流程中,xlsx二进制内容被两次错误转码:服务端res.json将Buffer转为JSON字节数组,客户端默认按UTF-8解析响应,最终拿到的file.data已经不是原始的Excel文件内容,因此XLSX解析结果和原文件完全不匹配。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:06:04