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
相关产品推荐
相关产品推荐

