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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:45:08