Node.js调用SFDC REST API获取图片存本地遇格式不支持问题求助
解决SFDC REST API获取图片显示“不支持的格式”问题
我帮你排查下这个问题——核心原因是图片的二进制数据在处理过程中被损坏了,而JS文件是纯文本类型,所以不受影响。下面拆解原因和修复方案:
问题根源
你的当前代码里,conn.request默认会把响应内容自动解析成字符串,但图片是二进制流数据,字符串编码的转换会破坏原始字节结构,导致保存后的图片格式损坏,最终显示“不支持的格式”。而JS文件本身是文本内容,字符串解析不会影响它的可用性。
修复方案
你需要修改请求配置,让conn.request返回原始的二进制Buffer,避免自动解析成字符串。具体调整如下:
修改后的Node.js代码
function createFile(attachmentBody, attachmntContentType, attachmntName) { var req = { url: attachmentBody, method: 'GET', headers: { "Content-Type": attachmntContentType }, encoding: null // 关键配置:让请求返回原始二进制Buffer }; var test = conn.request(req, function (err, resp) { if (err) { console.log(err) } else { // 直接将Buffer写入文件,无需额外转码 fs.writeFile(attachmntName, resp, function (err) { if (err) throw err console.log('File saved.') }) } }); }
关键调整说明
- 添加
encoding: null:这个配置会告诉请求库不对响应内容做任何字符串编码处理,直接返回原始的二进制Buffer,完美保留图片的字节数据。 - 移除多余转码步骤:之前的
Buffer.from(resp, 'binary').toString('base64')是冗余操作,现在直接将resp(Buffer类型)写入文件即可,避免二次转码破坏数据。
验证步骤
- 运行修改后的代码保存图片
- 打开保存的图片,确认是否能正常显示
- 可以在回调里打印
typeof resp,应该输出object(Buffer是对象类型),确认拿到的是原始二进制数据
内容的提问来源于stack exchange,提问作者Sakshi Sehdev
相关产品推荐
相关产品推荐

