ファイルアップロード / ダウンロード

Bot のコンテンツ、Drive、ユーザー、アドレス帳などで利用するファイルをアップロードまたはダウンロードする方法について説明します。

1. ファイルのアップロード {#file-upload}

ファイルのアップロードは以下の流れで行います。

  1. ファイルのアップロード URL の取得
  2. ファイルのアップロードの実行

file_upload

1-1. ファイルのアップロード URL の取得 {#get-upload-url}

各リソースのファイルのアップロード API を使用して、ファイルをアップロードする URL を取得します。

Request URL {#get-upload-url-api}

API ごとに、Request URL や Request Body の内容、アップロードできるファイルの最大サイズなどの制約が異なります。詳細はそれぞれの API ガイドを参照してください。

HTTP RequestDescription
POST /bots/{botId}/attachmentsコンテンツアップロード
POST /users/{userId}/photoユーザーの写真アップロード
POST /contacts/{contactId}/photo連絡先写真のアップロード
POST /boards/{boardId}/posts/{postId}/attachments投稿の添付ファイル登録
POST /boards/{boardId}/posts/{postId}/comments/{commentId}/attachmentsコメントの添付ファイル登録
POST /groups/{groupId}/note/posts/{postId}/attachments組織/グループノートの投稿の添付ファイル登録
POST /groups/{groupId}/folder/files/{fileId}組織/グループ - ファイルのアップロード
POST /groups/{groupId}/folder/files組織/グループ - ルートフォルダにファイルをアップロード
POST /users/{userId}/drive/files/{fileId}マイドライブ - ファイルのアップロード
POST /users/{userId}/drive/filesマイドライブ - ルートフォルダにファイルをアップロード
POST /sharedrives/{sharedriveId}/files/{fileId}共有ドライブ - ファイルをアップロード
POST /sharedrives/{sharedriveId}/files共有ドライブ - ルートフォルダにファイルをアップロード
POST /users/{userId}/drive/sharedfolders/{sharedFolderId}/files/{fileId}共有されたフォルダ - ファイルをアップロード
POST /users/{userId}/drive/sharedfolders/{sharedFolderId}/files共有されたフォルダ - ルートフォルダにファイルをアップロード

Request Method {#get-upload-url-request-method}

ファイルのアップロード API は POST リクエストで呼び出します。Content-Type には ”application/json; charset=UTF-8" を指定します。

POST (Content-Type: application/json; charset=UTF-8)

Request Body {#get-upload-url-request-body}

パラメータは JSON 形式で指定します。
一例として、Bot API でコンテンツをアップロードする場合のリクエストを記載します。
その他の API を利用する際に指定するパラメータについては、それぞれの API ガイドを参照してください。

Request Body (Bot){#get-upload-url-request-body-bot}
パラメータタイプ説明
fileNameStringファイル名
required

Request Body Example {#get-upload-url-request-bot-example}

{  "fileName": "uploadfile.jpg"}

Response {#get-upload-url-response}

呼び出しに成功すると、ファイルのアップロード URL が返ります。

パラメータタイプ説明
uploadUrlStringファイルのアップロード URL

Response Example {#get-upload-url-response-example}

{  "uploadUrl": "https://apis-storage.worksmobile.com/k/emsg/r/jp1/1648632512537498188.1648718912.1.3437109.0.0.0/uploadfile.jpg"}

1-2. ファイルのアップロードの実行 {#file-content-upload}

取得したファイルのアップロード URL にファイルをアップロードします。

参考
Drive API でファイルのアップロードが途中で失敗した場合、resume プロパティに true を指定してファイルのアップロード API を呼び出し、取得したファイルのアップロード URL を Content-Range を付与して呼び出すことで、ファイル アップロードの再開ができます。

Request URL {#file-content-upload-request-url}

取得したファイルのアップロード URL (uploadUrl)

HTTP Method {#file-content-upload-request-method}

ファイルのアップロード API は POST リクエストで呼び出します。RFC-1867 に従い、フォーム形式でファイルをアップロードします。

POST (Content-Type: multipart/form-data; boundary="$boundary”)

Request Example {#file-content-upload-request-example}

POST k/emsg/r/jp1/1648632512537498188.1648718912.1.3437109.0.0.0/uploadfile.jpg HTTP/1.1Host: apis-storage.worksmobile.comAuthorization: Bearer ...Content-Length: 1000Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="Filedata"; filename="uploadfile.jpg"Content-Type: image/jpeg(data)----WebKitFormBoundary7MA4YWxkTrZu0gW--

Request Example {#file-content-resume-upload-request-example}

POST k/emsg/r/jp1/1648632512537498188.1648718912.1.3437109.0.0.0/uploadfile.jpg HTTP/1.1Host: apis-storage.worksmobile.comAuthorization: Bearer ...Content-Length: 1000Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Range: 100-999/1000----WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="Filedata"; filename="uploadfile.jpg"Content-Type: image/jpeg(data)----WebKitFormBoundary7MA4YWxkTrZu0gW--

Request Example(CURL) {#file-content-upload-request-example-curl}

curl -XPOST 'https://apis-storage.worksmobile.com/k/emsg/r/jp1/1648632512537498188.1648718912.1.3437109.0.0.0/uploadfile.jpg' \-H 'Authorization: Bearer ...' \-H 'Content-Type: multipart/form-data' \-F 'resourceName=uploadfile.jpg' \-F 'FileData=@uploadfile.jpg

Response {#file-content-upload-response}

アップロードに成功すると、HTTP Status Code 200 番台を返し、応答内容が JSON 形式で返されます。
応答に含まれるプロパティは、アップロード先のサービスにより異なります。

Response Body (Bot / Contact / User / Board) {#file-content-upload-response-body}
パラメータタイプ説明
fileIdStringファイル ID
fileNameStringファイル名
fileSizeIntegerファイルサイズ
Response Body (Group / Drive / Sharedrive) {#file-content-upload-response-body-drive}
パラメータタイプ説明
fileIdStringファイル ID
fileNameStringファイル名
fileSizeIntegerファイルサイズ
parentFileIdString親フォルダのファイル ID
accessedTimeString最終アクセス日時
createdTimeString作成日時
filePathStringファイルパス
fileTypeStringファイルタイプ
hasPermissionBoolean権限設定有無
permissionRootFileIdString権限ルートフォルダのファイル ID
resourceLocationIntegerリソースの位置コード
statusesArray(String)ファイル状態
modifiedTimeString修正日時

Response Example {#file-content-upload-response-example}

HTTP/1.1 201 CreatedContent-Type: application/json;charset=UTF-8Content-Length: 120
{  "fileId": "jp1.1648634296934279638.1648720696.1.3437109.0.0.0",  "fileName": "uploadfile.jpg",  "fileSize": "11"}

2. ファイルのダウンロード {#file-download}

ファイルのダウンロードは以下の流れで行います。

  1. ファイルのダウンロード URL の取得
  2. ファイルのダウンロードの実行

file_download

2-1. ファイルのダウンロード URL の取得 {#get-download-url}

各リソースのファイルのダウンロード API を使用して、ファイルのダウンロード URL を取得します。

Request URL {#get-download-url-api}

API ごとに、Request URL と、指定する必要のあるパラメータが異なります。詳細はそれぞれの API ガイドを参照してください。

HTTP RequestDescription
GET /users/{userId}/photoユーザーの写真取得
GET /contacts/{contactId}/photo連絡先写真の取得
GET /boards/{boardId}/posts/{postId}/attachments/{attachmentId}投稿の添付ファイル取得
GET /boards/{boardId}/posts/{postId}/comments/{commentId}/attachments/{attachmentId}コメントの添付ファイル取得
GET /groups/{groupId}/note/posts/{postId}/attachments/{attachmentId}組織/グループノートの投稿の添付ファイル取得
GET /groups/{groupId}/folder/files/{fileId}/download組織/グループ - ファイルのダウンロード
GET /groups/{groupId}/folder/files/{fileId}/revisions/{revisionId}/download組織/グループ - 指定バージョンのファイルのダウンロード
GET /users/{userId}/drive/files/{fileId}/downloadマイドライブ - ファイルのダウンロード
GET /users/{userId}/drive/files/{fileId}/revisions/{revisionId}/downloadマイドライブ - 指定バージョンのファイルのダウンロード
GET /sharedrives/{sharedriveId}/files/{fileId}/download共有ドライブ - ファイルのダウンロード
GET /sharedrives/{sharedriveId}/files/{fileId}/revisions/{revisionId}/download共有ドライブ - 指定バージョンのファイルのダウンロード
GET /users/{userId}/drive/sharedfolders/{sharedFolderId}/files/{fileId}/download共有されたフォルダ - ファイルのダウンロード
GET /users/{userId}/drive/sharedfolders/{sharedFolderId}/files/{fileId}/revisions/{revisionId}/download共有されたフォルダ - 指定バージョンのファイルのダウンロード
GET /forms/{formId}/responses/{responseId}/attachments/{attachmentId}アンケート回答の添付ファイルダウンロード
GET /paperon/projects/{projectId}/files/{fileId}/downloadPaperOn 原本ファイルのダウンロード
GET /audits/logs/download監査データのダウンロード
GET /monitoring/message-contents/downloadトーク内容のダウンロード

Request Method {#get-download-url-request-method}

GET

Path Parameter {#get-download-url-request-parameter}

パラメータは Path 内に記載します。
一例として、Bot API でコンテンツを取得する場合に指定する必要のあるパラメータを記載します。
その他の API を利用する際に指定するパラメータについては、それぞれの API ガイドを参照してください。

Path Parameter (Bot) {#get-download-url-request-parameter-bot}

パラメータタイプ説明
fileIdStringファイル ID
required
botIdintegerBot ID
required

Response {#get-download-url-response}

呼び出しに成功すると、HTTP Status Code 302 が返され、ダウンロード URL は HTTP Location レスポンス ヘッダーで示されます。

注意

  • レスポンスヘッダーのフィールド名は大文字小文字を区別せずに扱ってください。表記が予告なく変更される可能性があります。
  • 参考: https://www.rfc-editor.org/rfc/rfc9110#section-5.1

Response example {#get-download-url-example}

HTTP/1.1 302 FoundLocation: https://apis-storage.worksmobile.com/jp1.1628695315008671000.1628781715.0.1000001.0.0.0

2-2. ファイルのダウンロードの実行 {#download-file-content}

HTTP Location レスポンス ヘッダーで示されるダウンロード URL にアクセスし、ダウンロードを実行します。

注意

  • ダウンロード URL にアクセスする際にも Authorization ヘッダを指定する必要があります。
  • 利用するライブラリによっては、ダウンロード URL を取得する API を呼び出した際に、Authorization ヘッダを指定せずに自動的にリダイレクトされる場合があります。

Request Example(CURL) {#file-content-download-request-example-curl}

curl -XGET 'https://apis-storage.worksmobile.com/jp1.1628695315008671000.1628781715.0.1000001.0.0.0' \-H 'Authorization: Bearer ...'
HTTP/1.1 200 OKContent-Type: image/jpegContent-Length: 11(FileData)