从S3保存图片遇加密格式问题,寻求可查看的解决方法
问题解决:S3下载图片后显示为加密串无法查看
问题根源
你的下载代码错误地将S3返回的二进制图片数据转换成base64字符串并写入文件,导致保存的文件是文本格式的base64编码内容,而非原始二进制图片数据。上传代码本身无问题,因为你直接传入了Buffer类型的文件内容到S3。
修复方案
修改下载代码,直接将S3返回的Body(Buffer类型)写入文件,无需转换base64:
const params = { Bucket: bucketName, Key: key, ResponseContentType: "image/png" }; const { Body } = await s3.getObject(params).promise(); if (!Body) { throw new Error('No data found for the S3 object.'); } const directoryPath = path.dirname(localFilePath); fs.mkdirSync(directoryPath, { recursive: true }); // 直接写入Buffer,无需转base64 fs.writeFileSync(localFilePath, Body); console.log(`Downloaded ${path.basename(key)}`);
额外说明
- 调用
Body.toString('base64')会把二进制图片数据转换成可打印的base64字符串,此时写入文件的是该字符串文本,而非图片原始二进制流,系统自然无法识别为图片文件。 - 上传时传入的是
Buffer类型的fileContent,S3会正确保存二进制数据,因此问题完全出在下载环节的处理逻辑上。
内容的提问来源于stack exchange,提问作者NadavT
相关产品推荐
相关产品推荐

