Blob データを挿入または更新する
blob データを挿入および更新するには、マルチパートリクエストボディを作成します。リクエストボディの最初のパートには、新しいレコードの説明や名前などの非バイナリ項目データが含まれます。2 つ目のパートには、アップロードするファイルのバイナリデータが含まれます。リクエストボディは、MIME マルチパートコンテンツタイプ標準に準拠する必要があります。詳細は、W3C 標準のマルチパートコンテンツタイプに関する説明を参照してください。
sObject Basic Information または sObject Rows リソースを使用する場合、アップロードの最大ファイルサイズは、ContentVersion オブジェクトの場合は 2 GB、使用可能な他のすべての標準オブジェクトの場合は 500 MB です。sObject Collections リソースを使用する場合、1 回の要求の全ファイルの最大合計サイズは 500 MB です。
この後のセクションでは、マルチパートコンテンツタイプ要求を使用して blob データを挿入/更新する方法の例を示します。これらの例のリクエストボディでは、JSON 形式を使用しています。
blob データを含む Document の挿入
次の要求およびリクエストボディの例では、PDF ファイルのバイナリデータを含む Document レコードを作成します。リクエストボディでは、ファイル自体のバイナリデータだけではなく、FolderId など、Document オブジェクトに必要な他の項目データも指定します。
Salesforce に新規 Document レコード用の Folder レコードがない場合は、sObject Basic Information リソースを使用して作成してから、この例に従ってください。Folder レコードの Type 項目が Document であることを確認します。
- Document を作成する場合の要求の例
-
1curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/Document/ -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @NewDocument.json - Document を作成する場合のリクエストボディの例
- このリクエストボディは、NewDocument.json のコンテンツを表します。ここでは、簡潔にするために PDF コンテンツのバイナリデータは省略されて「Binary data goes here.」���置き換えられています。実際の要求にはバイナリコンテンツ全体が含まれます。
1--boundary_string 2Content-Disposition: form-data; name="entity_document"; 3Content-Type: application/json 4 5{ 6 "Description" : "Marketing brochure for Q1 2011", 7 "Keywords" : "marketing,sales,update", 8 "FolderId" : "005D0000001GiU7", 9 "Name" : "Marketing Brochure Q1", 10 "Type" : "pdf" 11} 12 13--boundary_string 14Content-Type: application/pdf 15Content-Disposition: form-data; name="Body"; filename="2011Q1MktgBrochure.pdf" 16 17Binary data goes here. 18 19--boundary_string-- - レスポンスボディの例
- 成功すると、新規 Document の ID が返されます。
1{ 2 "id" : "015D0000000N3ZZIA0", 3 "errors" : [ ], 4 "success" : true 5} - エラー応答の例
-
1{ 2 "fields" : [ "FolderId" ], 3 "message" : "Folder ID: id value of incorrect type: 005D0000001GiU7", 4 "errorCode" : "MALFORMED_ID" 5}
blob データを含む Document の更新
この例では、既存の Document レコードを更新します。リクエストボディのコンテンツに応じて、レコード項目とそれに関連付けられているバイナリデータのいずれかまたは両方を更新できます。
レコード項目のみを更新する場合は、リクエストボディにマルチパートコンテンツタイプは不要です。
- Document オブジェクトのバイナリデータを更新する場合の要求の例
-
1curl https://MyDomainName.my.salesforce.com/services/data/v59.0/Document/015D0000000N3ZZIA0 -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @UpdateDocument.json -X PATCH - Document オブジェクトのバイナリデータを更新する場合のリクエストボディの例
-
このリクエストボディは、UpdateDocument.json のコンテンツを表します。この例では、レコードのバイナリデータと Name 項目および Keywords 項目を更新します。バイナリデータのみを更新する場合は、Name 項目と Keywords 項目を含むコード行を削除できます。
ここでは、簡潔にするために PDF コンテンツのバイナリデータは省略されて「Updated document binary goes here.」に置き換えられています。実際の要求にはバイナリコンテンツ全体が含まれます。
1--boundary_string 2Content-Disposition: form-data; name="entity_content"; 3Content-Type: application/json 4 5{ 6 "Name" : "Marketing Brochure Q1 - Sales", 7 "Keywords" : "sales, marketing, first quarter" 8} 9 10--boundary_string 11Content-Type: application/pdf 12Content-Disposition: form-data; name="Body"; filename="2011Q1MktgBrochure.pdf" 13 14Updated document binary data goes here. 15 16--boundary_string-- - Document オブジェクトの項目を更新する場合のレスポンスボディの例
- 戻り値なし
- エラー応答
- 「状況コードとエラー応答」を参照してください。
ContentVersion の挿入
この例では、新規 ContentVersion を挿入します。ファイル自体のバイナリデータだけではなく、ReasonForChange や PathOnClient など、他の項目の値も指定します。ContentVersion は、必ず ContentDocument に関連付けられているため、このメッセージには ContentDocumentId が含まれます。
- ContentVersion を挿入する場合の使用例
-
1curl https://MyDomainName.my.salesforce.com/services/data/v59.0/sobjects/ContentVersion -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @NewContentVersion.json - ContentVersion を挿入する場合のリクエストボディの例
-
このリクエストボディは、NewContentVersion.json ファイルの内容を表します。ここでは、簡潔にするために PDF コンテンツのバイナリデータは省略されて「Binary data goes here.」に置き換えられています。実際の要求にはバイナリコンテンツ全体が含まれます。
1--boundary_string 2Content-Disposition: form-data; name="entity_content"; 3Content-Type: application/json 4 5{ 6 "ContentDocumentId" : "069D00000000so2", 7 "ReasonForChange" : "Marketing materials updated", 8 "PathOnClient" : "Q1 Sales Brochure.pdf" 9} 10 11--boundary_string 12Content-Type: application/octet-stream 13Content-Disposition: form-data; name="VersionData"; filename="Q1 Sales Brochure.pdf" 14 15Binary data goes here. 16 17--boundary_string-- - ContentVersion を挿入する場合のレスポンスボディの例
-
1{ 2 "id" : "068D00000000pgOIAQ", 3 "errors" : [ ], 4 "success" : true 5} - ContentVersion を挿入した場合のエラー応答
- 「状況コードとエラー応答」を参照してください。
sObject コレクションを使用した blob レコードのコレクションの挿入
この例では、新規 Document のコレクションを挿入します。ファイル自体のバイナリデータだけではなく、コレクションの各レコードの Description や Name など、他の項目データも指定します。
- 属性
- blob データに sObject コレクションを使用する場合は、リクエストボディの属性の対応付けで type 以外にも特定の属性値を指定する必要があります。
パラメータ 説明 binaryPartName blob データでは必須です。バイナリパートの一意の識別子です。 binaryPartNameAlias blob データでは必須です。バイナリデータが挿入または更新される項目の名前です。 - Document を作成する場合の例
-
1curl https://MyDomainName.my.salesforce.com/services/data/v59.0/composite/sobjects/ -H "Authorization: Bearer token" -H "Content-Type: multipart/form-data; boundary=\"boundary_string\"" --data-binary @newdocuments.json - Document を作成する場合のリクエストボディの例
- このコードは、newdocuments.json のコンテンツです。ここでは、簡潔にするために PDF コンテンツのバイナリデータは省略されて「Binary data goes here.」に置き換えられています。実際の要求にはバイナリコンテンツ全体が含まれます。
1--boundary_string 2Content-Disposition: form-data; name="collection" 3Content-Type: application/json 4 5{ 6 "allOrNone" : false, 7 "records" : 8 [ 9 { 10 "attributes" : 11 { 12 "type" : "Document", 13 "binaryPartName": "binaryPart1", 14 "binaryPartNameAlias": "Body" 15 }, 16 "Description" : "Marketing Brochure", 17 "FolderId" : "005xx000001Svs4AAC", 18 "Name" : "Brochure", 19 "Type" : "pdf" 20 }, 21 { 22 "attributes" : 23 { 24 "type" : "Document", 25 "binaryPartName": "binaryPart2", 26 "binaryPartNameAlias": "Body" 27 }, 28 "Description" : "Pricing Overview", 29 "FolderId" : "005xx000001Svs4AAC", 30 "Name" : "Pricing", 31 "Type" : "pdf" 32 } 33 ] 34} 35 36--boundary_string 37Content-Disposition: form-data; name="binaryPart1"; filename="Brochure.pdf" 38Content-Type: application/pdf 39 40Binary data goes here. 41 42--boundary_string 43Content-Disposition: form-data; name="binaryPart2"; filename="Pricing.pdf" 44Content-Type: application/pdf 45 46Binary data goes here. 47 48--boundary_string-- - Document を作成する場合のレスポンスボディの例
- 成功すると、新規 Document の ID が返されます。
1[ 2 { 3 "id": "015xx00000013QjAAI", 4 "errors": [], 5 "success": true 6 }, 7 { 8 "id": "015xx00000013QkAAI", 9 "errors": [], 10 "success": true 11 } 12]
詳細は、「sObject コレクション」を参照してください。
マルチパートメッセージの考慮事項
blob データを挿入/更新するときの、マルチパートメッセージの形式に関するいくつかの考慮事項を次に示します。
- 境界文字列
-
- マルチパートリクエストボディの各パートを区分します。
- マルチパートリクエストの Content-Type ヘッダーに指定する必要があります。
- 70 文字まで入力できます。
- リクエストボディのどの部分にも出現しない文字列値である必要があります。
- 最初の境界文字列には、2 つのハイフン (--) プレフィックスを含めます。
- 最後の境界文字列には、2 つのハイフン (--) サフィックスを含めます。
- Content-Disposition ヘッダー
-
- リクエストボディの各パートで必要です。
- 値として form-data が必要です。また、name 属性も必要です。
- リクエストボディの非バイナリパートでは、name 属性に任意の値を使用します。
- 1 つの Document の場合、リクエストボディのバイナリパートで name 属性を使用して、オブジェクトの blob データ項目の名前を指定します。たとえば、Document オブジェクトの blob データ項目の名前は Body です。
- sObject コレクションを使用して Document を挿入または更新する場合、リクエストボディの各バイナリパートで name 属性を使用して、そのパートの一意の識別子を指定します。これらの ID は、リクエストボディの非バイナリパートによって参照されます。
- バイナリパートには、ローカルファイルの名前を表す filename 属性を含める必要があります。
- Content-Type ヘッダー
-
- マルチパートリクエストボディの各パートで必要です。
- マルチパートリクエストボディの非バイナリパートでは、application/json および application/xml コンテンツタイプをサポートします。
- マルチパートリクエストボディのバイナリパートでは、任意のコンテンツタイプをサポートします。
- 改行
- マルチパートリクエストボディの各パートでは、ヘッダーとデータの間に改行を追加する必要があります。例に示されているように、Content-Type および Content-Disposition ヘッダーは、改行によって JSON またはバイナリデータから分離されています。