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

使用AWS SDK v2上传Base64图片至S3后无法打开的问题求助

解决思路
  • 修正Base64前缀替换逻辑:你的replace语句错误多删了Base64数据开头的/,正确做法是只移除data:image/png;base64,前缀:
    img_data = source.replace("data:image/png;base64,", "");
    
  • 将Base64字符串解码为二进制Buffer:S3的Body需要传入二进制数据而非原始Base64字符串,得把处理后的Base64字符串解码成Buffer:
    const imgBuffer = Buffer.from(img_data, 'base64');
    
    之后把data对象里的Body换成这个Buffer,同时可以删掉ContentEncoding: 'base64'——因为已经传入解码后的二进制数据了。
  • 匹配正确的ContentType:源数据是PNG格式(前缀里的image/png),但你上传时指定了image/jpeg,类型不匹配会导致文件无法打开。要么把ContentType改成image/png,要么如果确实是JPEG数据,要先修正源数据的前缀。
  • 同步文件名后缀:文件名用了test.jpeg,但源数据是PNG,建议改成test.png,避免本地打开时的格式识别问题。
  • 完整修正后的代码示例:
    source = "data:image/png;base64,/9j/4SlqRXhpZgAASUkq.....";
    img_data = source.replace("data:image/png;base64,", "");
    const imgBuffer = Buffer.from(img_data, 'base64');
    
    var data = {
      Key: directory + '/' + 'test.png',
      Bucket: 'bucket',
      Body: imgBuffer,
      ContentType: 'image/png'
    };
    
    s3.putObject(data, function(err, res){
      if (err) {
        console.log(err);
        console.log('Error uploading data: ', res);
      } else {
        console.log('successfully uploaded the image!');
      }
    });
    
  • 验证数据完整性:可以先把解码后的Buffer写入本地文件,确认图片能正常打开,再上传到S3,排除Base64数据本身损坏的可能。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:50:30