通过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
相关产品推荐
相关产品推荐

