HTML→NodeJS→S3上传图片:文件大小异常且无法打开
问题分析与解决方案
你遇到的图片上传S3后体积变大、无法打开的问题,核心原因是上传时未指定正确的Content-Type,导致AWS将二进制图片数据当作文本格式处理,破坏了原始二进制结构。
具体原因
本地图片是二进制格式,大小111KB,但上传S3时如果缺失Content-Type参数,S3会默认使用text/plain类型。此时SDK会把file.buffer(二进制数据)转成UTF-8字符串上传,这个转换过程会让非UTF-8兼容的字节被替换,导致文件体积膨胀、数据损坏。
修复方案
在PutObjectCommandInput中添加Content-Type字段,直接使用Multer返回的文件MIME类型即可:
const uploadParams: PutObjectCommandInput = { Bucket: this.bucket, Key: file.originalname, Body: file.buffer, ContentType: file.mimetype, // 新增该行,指定正确的文件类型 };
额外验证点
- 确认Multer配置未强制设置
encoding(默认值为null,即二进制存储,不要修改为utf-8) - 你已经验证过
file.buffer写入本地可正常打开,说明buffer本身无问题,只需聚焦S3上传参数修正
修改后重新上传,S3会正确识别图片类型,保留原始二进制数据,文件大小将和本地一致,下载后可正常打开。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

