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

Node.js上传图片至Salesforce后无预览、文件损坏如何解决

问题原因

上传到Salesforce的文件内容被错误拼接了Data URL前缀,导致存储的内容不是原始图片二进制数据。
JPEG格式报错提示文件起始字节为0x64 0x61,对应ASCII字符da,正好是你拼接的data:image/png;base64,字符串的前两个字符。Salesforce的ContentVersion接口不会自动识别、剥离Data URL格式的前缀,会把你传入的完整字符串(前缀+base64内容)解码后存储,最终文件开头是多余的文本内容,自然无法被识别为合法图片,也无法在UI中生成预览。
之前修改contentType为image/png没有效果,是因为问题根源不在请求的Content-Type声明,而在传入的文件内容本身非法。

修复方法

直接移除VersionData字段值里拼接的Data URL前缀,使用fs.readFileSync读取得到的纯base64字符串即可,也就是放开你代码里注释的纯base64传值行,删除带前缀的写法:

const base64Content = fs.readFileSync('/home/***/Desktop/version.png', { encoding: 'base64' });
const fileName='version.png';

request.post({
    url: `${res.instance_url}/services/data/v49.0/sobjects/ContentVersion`,
    auth: {
        bearer: res.access_token
    },
    formData: {
        entity_content: {
            value: JSON.stringify({PathOnClient: fileName}),
            options: {
                contentType: 'application/json'
            }
        },
        VersionData: {
            value: base64Content, // 直接传纯base64内容,不要拼接data:image/xxx;base64,前缀
            options: {
                filename: fileName,
                contentType: 'application/octet-stream'
            }
        }
    }
}, (err, response) => {
    if (err) callbackerr(err);
    callback(response)
})
验证说明

修正后重新上传的文件:

  • PNG格式文件头为合法的0x89 0x50 0x4E 0x47,JPEG格式文件头为合法的0xFF 0xD8 0xFF,下载后可正常打开
  • Salesforce UI会自动识别文件格式,正常生成预览
  • 现有代码除了多余的Data URL前缀外,其余逻辑(接口地址、鉴权、entity_content写法)均正确,无需额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:12:33