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

Node.js+multer-s3上传S3图片本地正常,Lambda部署后格式无效

问题

我用Node.js、multer和AWS S3搭建了图片上传API,开发环境里一切正常,返回的图片URL能正常下载打开。但部署到AWS Lambda+API Gateway后,虽然API返回的URL一样,但下载的图片显示「格式无效」。

问题代码

上传处理函数

const uploadImage = async (req,res) => {
  let myFile = req.file.originalname.split(".")
    const fileType = myFile[myFile.length - 1]

    const params = {
        Bucket: 'test-bucket2601',
        Key: `${Date.now()}.${fileType}`,
        Body: req.file.buffer
    }

  s3.upload(params, (error, data) => {
        if(error){
            res.status(500).send(error)
        }
        res.json({data})
        
    })
}

路由配置

routes.route('/upload').post(upload,uploadImage);

Multer与S3初始化代码

const s3 = new aws.S3({
    credentials: {
    accessKeyId: awsKeys?.accessKeyId,
    secretAccessKey: awsKeys?.secretAccessKey 
    }
   });

   const storage = multer.memoryStorage({
     destination: function(req, file, callback) {
      callback(null, '')
     }})

    const upload = multer({storage}).single('imageUrl')
解决方案

问题根源在于S3上传参数缺失正确的媒体类型,以及API Gateway对二进制数据的默认处理逻辑,具体修复步骤如下:

  1. 给S3上传参数添加ContentType
    上传到S3时必须指定文件的MIME类型,否则S3会默认设为application/octet-stream,导致下载后系统无法识别图片格式。修改params对象:

    const params = {
        Bucket: 'test-bucket2601',
        Key: `${Date.now()}.${fileType}`,
        Body: req.file.buffer,
        ContentType: req.file.mimetype // 新增该行,传递multer解析出的MIME类型
    }
    
  2. 配置API Gateway支持二进制媒体类型
    Lambda+API Gateway环境默认不会正确传递二进制文件数据,需在控制台做以下设置:

    • 进入目标API的「设置」选项卡
    • 在「二进制媒体类型」中添加*/*(或指定具体图片类型如image/jpeg、image/png)
    • 重新部署API到对应阶段
  3. 确保Lambda集成模式正确

    • 若使用API Gateway v1(REST API),需开启「使用Lambda代理集成」,保证请求体完整传递给Lambda
    • 若使用API Gateway v2(HTTP API),需将集成请求的「有效载荷格式」设为2.0
  4. 优化文件扩展名处理逻辑
    原代码通过文件名拆分获取扩展名的方式存在漏洞(比如文件名包含多个.),可改用path模块优化:

    const path = require('path');
    // 替换原扩展名处理代码
    const fileType = path.extname(req.file.originalname).slice(1); // 去除扩展名开头的.
    

内容的提问来源于stack exchange,提问作者Abdullah Bin Anis EB20_2003

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:27:28