使用Nest.js上传至S3 Bucket时遇错误求助
解决Nest.js上传文件到S3 Bucket的类型错误问题
问题根源
你遇到的两个错误本质都是没有正确传递文件的二进制内容给S3 SDK:
- 第一个错误是因为直接把
Express.Multer.File整个对象传给了PutObjectCommand的Body参数,而SDK要求Body必须是字符串、Buffer、ArrayBuffer这类二进制数据类型,而非完整的文件对象。 - 第二个错误是手动转数组时,没有正确处理内容长度,导致S3无法识别文件大小。
解决方案
Multer解析后的Express.Multer.File对象自带buffer属性,这就是文件的二进制内容,直接用它作为Body参数即可。同时建议添加ContentType参数,让S3正确识别文件类型。
修改后的上传函数代码
//Function to upload const uploadObject = async (file, bucket, name) => { // Define the params const params = { Bucket: bucket, Key: "staging/" + String(name), Body: file.buffer, // 关键:改用file的buffer属性 ContentType: file.mimetype // 可选,让S3识别文件类型 } try { const data = await s3Client.send(new PutObjectCommand(params)); Logger.log( "Successfully uploaded object: " + params.Bucket + "/" + params.Key ); return data } catch (err) { console.log("Error", err) } }
补充说明
如果是大文件上传,更推荐用流的方式传递(file.stream),避免内存占用过高:
Body: file.stream
内容的提问来源于stack exchange,提问作者Graham Morby
相关产品推荐
相关产品推荐

