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

通过jsforce向Salesforce上传头像 代码运行异常如何解决

核心问题

你当前代码无法正常上传联系人头像的根本原因是Salesforce的联系人头像并不存储在Attachment对象中,给Contact记录挂载普通附件不会自动成为联系人头像,除此之外还有两个容易触发异常的问题:

  • Node.js高版本已经废弃new Buffer()语法,直接使用容易出现base64编码异常
  • 手动转base64传Attachment的逻辑本身只适用于普通附件上传,和头像上传是两套完全独立的接口逻辑
修复后的实现代码

直接调用Salesforce Connect API提供的专用头像上传接口即可,不需要手动转base64,也不需要操作Attachment对象:

const fs = require('fs');
// 配置项
const fileOnServer = "./files/photo.jpg";
const targetContactId = "0034K000004ZpFcQAK";
const fileType = "image/jpeg";

fs.readFile(fileOnServer, function (err, data) {
  if (err) {
    console.log(err);
    return res.status(404).send({ errorMessage: err });
  }
  // 调用头像专用上传接口
  JSFORCE_CONNECTION.request({
    method: 'POST',
    // 接口路径固定,v59.0可替换为你当前环境使用的Salesforce API版本,建议使用v50.0及以上版本
    url: `/services/data/v59.0/connect/photos/Contact/${targetContactId}`,
    headers: {
      'Content-Type': fileType,
      'Slug': "Contact Picture"
    },
    body: data // 直接传入读取到的二进制buffer即可,无需转base64
  }, function (err, ret) {
    if (err) {
      res.send("error");
      return console.error("上传失败:", err);
    }
    console.log("头像上传成功,头像地址:", ret.largePhotoUrl);
    res.send("created");
  });
});
注意事项
  • 请确保jsforce连接使用的账号拥有目标Contact记录的编辑权限,以及Connect API的访问权限
  • 上传的头像文件仅支持JPG、PNG、GIF格式,单文件大小不能超过2MB,建议分辨率控制在240*240像素以内避免压缩异常
  • 如果你的Node.js版本在10以上,涉及Buffer操作请统一使用Buffer.from()替代废弃的new Buffer()写法,避免编码兼容问题
  • 如果你确实需要通过Attachment存储图片后再设置为头像,还需要在Attachment创建成功后额外调用一次头像绑定接口,流程比直接调用专用接口复杂很多,非必要不采用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:00:59