Apex REST — File Upload with RestRequest

DEX455 - Apex Web 服务完全指南:SOAP Web 服务与 Apex REST

📄 第 262 页 🎬 视频课程

课程章节介绍

咱们今天这一张幻灯片讲的是怎么用 Apex REST 这个接口来上传一个二进制文件,比如给一个案例(Case)添加附件。 你会看到这个例子里,重点就是当你的 Apex REST 方法,不声明任何参数,的时候,那整个 HTTP 请求的“身体”会被 Salesforce 自动当作一个 Blob(二进制大对象),直接放到 `RestContext.request.requestBody` 里面,非常方便。 咱们来看实现思路: 首先,这个 REST 方法是从 URL 里把案例的 ID 提取出来。然后我们就用请求体里的那个 Blob 数据,创建一个 Attachment 对象的 `Body` 字段。其他像文件名这些信息,我们可能会从请求头或者固定规则里取。最后把这个附件插入到数据库里,跟对应的案例关联起来。 你可以想象,不管客户端发来的是图片、PDF 还是什么其他文件,Salesforce 这边不用做多余的处理,直接拿到二进制内容就能保存。 那外部怎么调用呢?幻灯片里提到了 ,cURL, 命令,用的是 `--data-binary` 这个选项。`--data-binary` 的好处是它会原封不动地把文件内容发出去,不会因为编码或者换行符丢失数据,而且我们还能通过 `-H` 设置合适的 `Content-Type` 请求头,告诉 Salesforce 你传的是个 JPEG 还是 PNG。 成功之后,这个 REST 方法会返回一个 JSON,里面包含新创建的附件 ID,这样调用方就知道上传成功了。 你要在系统里验证也很简单:打开那个案例记录,往下翻到“附件”相关列表,就能看到刚才上传的文件,可以点开预览一下。 所以总结起来,这个模式就是 REST 方法无参数 + 直接读取 `requestBody` + `--data-binary` 上传,一条龙搞定文件接收。对于需要让外部系统给 Salesforce 案例补充材料、上传凭证的场景特别实用。

关键词

Apex Salesforce Developer Guide