【发布时间】:2012-04-18 18:40:23
【问题描述】:
我有一个 APEX 方法,它尝试将表单发布到 SFDC 的 APEX 代码之外的远程端点。
一切似乎都正确编码,服务器发回了 200 响应,但附件没有随请求一起到达……SFDC 是否在我的帖子正文发送之前删除了它的内容?
HttpRequest req = new HttpRequest();
req.setHeader('Authorization','Basic '+EncodingUtil.base64Encode(Blob.valueOf('removed:removed')));
req.setHeader('Content-Type','multipart/form-data; boundary=-----------------------------153501500631101');
req.setHeader('X-Atlassian-Token','nocheck');
req.setMethod('POST');
req.setEndpoint(endPoint+'issue/'+c.Internal_Bug_Number__c+'/attachments');
String body = '-----------------------------153501500631101\r\n';
body = body + 'Content-Disposition: form-data; name="Filedata"; filename="'+attachments[0].Name+'"\r\n';
body = body + 'Content-Type: '+attachments[0].ContentType+'\r\n';
body = body + 'Content-transfer-encoding: base64\r\n\r\n';
body = body + attachments[0].Body+ '\r\n';
body = body + '-----------------------------153501500631101--\r\n';
req.setBody(body);
【问题讨论】:
-
不要设置 content-Length 标头。您也正在对 blob 进行 base64 编码,但并未将其表示为内容编码。
-
@superfell Attachment.Body 存储为base64 encoded string...EncodingUtil 的使用是为了在发送前将其转换为字符串。我将尝试更改内容长度和“压缩”以匹配 base64 编码而不将其转换为字符串
-
@superfell,好的,我按照你的指示,仍然是状态 200,但另一端什么都没有......
-
创建一个 RequestBin (requestb.in) 并将数据发布到那里 - 你应该能够看到实际发生了什么。
-
我会尝试以下操作:(1) 从命令行使用 curl 尝试,(2) 将代码中的 base64 编码替换为显式字符串 - 'SGVsbG8gd29ybGQh' 是 'Hello world!' ,并且,如果可行,(3)转储您正在创建的主体以进行调试,看看有什么区别。发生了一些奇怪的事情......
标签: http salesforce apex-code