REST API を使ってファイルをアップロードする



+ [API呼び出しを使用してSalesforceに画像をアップロードする](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KB1yF0AT)

Postman を使用して Salesforce に画像をアップロードしようとしましたが、API 応答は成功を示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8c137972-06b6-6e9b-8ccc-09e8341160e7.png)

Idが068から始まっているのでContentVersionオブジェクトは作成されている感じですね。


ただし、画像は Salesforce では表示されません。Content-Type が正しく設定され、ParentId を使用して画像が適切なレコードに関連付けられていることを確認しました。

PDFファイルのようですがプレビューできていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2cb77b34-d02e-03e7-c58a-88a9d5c2d8d5.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6891de79-2c33-40b4-50c2-422bf24151a4.png)

以下とエラーメッセージは同じみたいですが...

+ ["Preview not available" OR "Error loading Files". ](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4WoKSAV)


これとはちょっと違う？

+ [PDFファイルのアップロードが機能しない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007X7eMd)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/519e9361-a05d-f5d8-ab08-9ebb0cef3043.png)

+ [「Google Chrome で PDF ドキュメントの読み込みに失敗しました」というエラーを解決するにはどうすればよいですか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007T4B3OSAV)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/50c42104-9440-0c5f-d9c7-12e00e428c4f.png)

+ [【アイデア】Lightning Experience で見積 PDF を生成するときに「PDF ドキュメントの読み込みに失敗しました」というエラーが発生する](https://issues.salesforce.com/issue/a028c00000gAzCSAA0/failed-to-load-pdf-document-error-when-generating-quote-pdf-in-lightning-experience)

# バイナリーファイル

+ [Send A file in binary format in REST API](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000nHNo0AM)


```java
public static void sendBinaryFile(String endpointUrl, String fileName, Blob fileBlob) {

    HttpRequest req = new HttpRequest();
    req.setEndpoint(endpointUrl);
    req.setMethod('POST');
    // Define the boundary
    String boundary = '------------------------boundary123';
    req.setHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
    // Construct the body
    String bodyStart = '--' + boundary + '\r\n' +
        'Content-Disposition: form-data; name="file"; filename="' + fileName + '"\r\n' +
        'Content-Type: application/pdf\r\n\r\n';
    String bodyEnd = '\r\n--' + boundary + '--';
    // Combine the body parts
    Blob bodyBlob = Blob.valueOf(bodyStart).append(fileBlob).append(Blob.valueOf(bodyEnd));
    req.setBodyAsBlob(bodyBlob);
    // Send the request
    Http http = new Http();
    try {
        HttpResponse res = http.send(req);
        System.debug('Response: ' + res.getBody());
    } catch (Exception e) {
        System.debug('Error: ' + e.getMessage());
    }
}
```

# 大きなサイズのファイルをアップロードする

+ [サイズの大きいファイルをApexで扱えますか？](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KAfCr)

:::note
以下を見てもApexで大きなサイズのファイルを使うのは難しいと思います。

https://stackoverflow.com/questions/75226374/how-to-upload-a-large-file-6mb-to-salesforce-through-a-lightning-component-us

https://salesforce.stackexchange.com/questions/185878/size-limit-on-contentversion-object-in-salesforce

REST APIを利用してログファイルを取得すればサイズの制限は回避できると思います。

https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/using_resources_event_log_files.htm

https://salesforce.stackexchange.com/questions/399450/how-to-read-eventlogfile-without-using-salesforce-elf-browser
:::