(Salesforce)クラウドサインへのファイルアップロードをAPIで行いたい
Q&A
Closed
今の問題
Salesforceの契約情報をクラウドサインに連携させようとしており、実装は Apex から API コールするような形で行っているところです。
現在は、トークン取得したり、書類を作成したりなどの基本的な実装は出来たのですが、ファイルのアップロードだけどうしても上手く行かず、ご存知でしたら教えて欲しいです!
やりたい事
既に作成しているクラウドサイン > 書類に対して API で、1つのPDFファイルを追加(添付)する事です。
現在のソースコード (サンプルですがほぼ今の作りを踏襲)
public class CloudSignFileUploader {
// ファイルアップロードを実行
public static void executeSample() {
// ContentVersion からPDFデータ(Blob)を取得
Blob pdfData = XXXXX;
// ファイルアップロード用のエンドポイント(XXXXXは書類ID)
String endPoint = 'https://api.cloudsign.jp/documents/XXXXX/files';
// access_token (処理の詳細は割愛)
String accessToken = XXXXX;
requestFileUpload(endPoint, EncodingUtil.base64Encode(pdfData), accessToken);
}
// クラウドサインのファイルアップロードAPIをコールする
public static HttpResponse requestFileUpload(String endPoint, String base64PdfData, String accessToken) {
String boundary = '------------' + String.valueOf(DateTime.now().getTime());
String body =
'--' + boundary + '\r\n' +
'Content-Disposition: form-data; name="テスト基本契約"; filename="テスト基本契約書.pdf"' + '\r\n' +
'Content-Type: application/pdf' + '\r\n' +
'\r\n' +
base64PdfData + '\r\n';
body += '--' + boundary + '--\r\n';
HttpRequest req = new HttpRequest();
req.setMethod('POST');
req.setEndpoint(endPoint);
req.setHeader('Authorization', 'Bearer ' + accessToken);
req.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
req.setBody(body);
Http http = new Http();
return http.send(req);
}
}
是非教えて欲しい事・・・
上記の executeSample
実行するも、
- Status = Bad Request
- StatusCode = 400
- Response Body =
{"error":"bad_request","message":"invalid upload"}
が返ってきます。
色々頑張ったのですが、私の理解不足の為、手詰まりでして、
上記のソースコードで何が問題かお分かりになれば、何卒教えてください。
参考
正式なAPI仕様
https://app.swaggerhub.com/apis/CloudSign/cloudsign-web_api/0.14.0#/default/post_documents__documentID__files
POST /documents/{documentID}/files
が対象のAPI情報です。
以下のURLとか参考にして、処理を作っています。
0