NodeJS读取Excel到Buffer后上传AWS S3文件损坏问题求助
问题分析与解决
你的问题出在用utf-8编码读取二进制文件上。Excel是二进制格式的文件,不是纯文本,当你用utf-8编码读取时,Node.js会把原始二进制字节尝试解析成UTF-8文本,这个过程会破坏原始数据(比如无法解析的字节会被替换成占位符),最终生成的Buffer和原文件完全不一致,上传到S3后自然无法正常打开。
修正方案
直接以二进制模式读取文件,readFileSync在不指定编码参数时,会直接返回原始的Buffer,不需要额外转换:
import { fileURLToPath } from 'url'; import path from 'path'; import { readFileSync } from 'fs'; // 补充导入readFileSync const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); export const readFileAsBuffer = (file:string): Buffer => { // 不指定编码,直接读取二进制数据返回Buffer return readFileSync(path.resolve(__dirname, file)); }
额外说明
所有二进制类型文件(Excel、图片、ZIP压缩包等)都必须以二进制方式读取,不能使用文本编码(如utf-8、ascii),否则会篡改原始字节结构,导致文件损坏。
内容的提问来源于stack exchange,提问作者BreenDeen
相关产品推荐
相关产品推荐

