使用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
相关产品推荐
相关产品推荐

