アップロードセッションをコミット

post
https://upload.box.com/api/2.0
/files/upload_sessions/:upload_session_id/commit/

アップロードセッションを閉じて、アップロード済みのチャンクからファイルを作成します。

リクエスト

Bearer [ACCESS_TOKEN]
application/json

パスパラメータ

stringパス内必須
D5E3F7A

アップロードセッションのID。

リクエスト本文

Upload part array本文内必須

アップロードされたパーツのリストの詳細

リクエストヘッダー

stringヘッダー内
必須
sha=fpRyg5eVQletdZqEKaFlqwBXJzM=

ファイル全体のRFC3230メッセージのダイジェスト。

サポートされているのはSHA1のみです。SHA1ダイジェストはBase64でエンコードされている必要があります。このヘッダーの形式は、sha=BASE64_ENCODED_DIGESTです。

stringヘッダー内
省略可能
1

変更を加える前にこの項目が最近変更されていないことを確認します。

その項目の最後に認識されたetag値をこのヘッダーに渡すと、それ以降に項目が変更されている場合、エンドポイントは412 Precondition Failedを返して失敗します。

stringヘッダー内
省略可能
1

項目が変更されている場合にのみ、その項目を返します。

その項目の最後に認識されたetag値をこのヘッダーに渡すと、それ以降に項目が変更されていない場合、エンドポイントは304 Not Modifiedを返して失敗します。

レスポンス

application/jsonFiles

リスト内のファイルオブジェクトを返します。

none

すべてのチャンクがすでにアップロードされているものの、まだ処理されていない場合に返されます。

アップロードセッションを調べてチャンク処理の進捗状況に関する詳細情報を取得し、すべてのチャンクが処理された後でファイルのコミットを再試行します。

ターゲットフォルダに同じ名前のファイルがすでに存在する場合は、エラーを返します。

If-MatchまたはIf-None-Match条件に一致しなかった場合は、エラーを返します。

予期しないクライアントエラー。

post
アップロードセッションをコミット
このドキュメント内で一部のAPIを試せるようになりました。
ログイン

リクエストの例

cURL
curl -X POST https://upload.box.com/api/2.0/files/upload_sessions/F971964745A5CD0C001BBE4E58196BFD/commit \
     -H 'Authorization: Bearer <ACCESS_TOKEN>'
     -H "Digest: sha=fpRyg5eVQletdZqEKaFlqwBXJzM=" \
     -H 'Content-Type: application/json'
     -d '{
       "parts": [
         {
           "part_id": "BFDF5379",
           "offset": 0,
           "size": 8388608,
	   "sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc"
         },
		     {
           "part_id": "E8A3ED8E",
           "offset": 8388608,
           "size": 1611392,
	   "sha1": "234b65934ed521fcfe3424b7d814ab8ded5185dc"
         }
       ],
       "attributes": {
         "content_modified_at": "2017-04-08T00:58:08Z"
       }
     }'
Java
//Creates the file hash
byte[] digestBytes = digest.digest();
//Base64 encoding of the hash
String digestStr = Base64.encode(digestBytes);

//Commit the upload session. If there is a failure, abort the commit.
BoxFile.Info fileInfo = session.commit(digestStr, parts, null, null, null);
Python
import hashlib

sha1 = hashlib.sha1()
# sha1 should have been updated with all the bytes of the file

file_atributes = {
    'description': 'A file uploaded via Chunked Upload',
}

upload_session = client.upload_session('11493C07ED3EABB6E59874D3A1EF3581')
uploaded_file = upload_session.commit(sha1.digest(), file_atributes=file_atributes)
print('Successfully uploaded file {0} with description {1}'.format(uploaded_file.id, uploaded_file.description))
Node
// Finalize upload session 93D9A837B45F
client.files.commitUploadSession(
	'93D9A837B45F',
	fileHash.digest('base64'),
	{description: 'A file I uploaded in chunks!'},
	callback
);

レスポンスの例

{
  "entries": [
    {
      "id": 12345,
      "etag": 1,
      "type": "file",
      "sequence_id": 3,
      "name": "Contract.pdf",
      "sha1": "85136C79CBF9FE36BB9D05D0639C70C265C18D37",
      "file_version": {
        "id": 12345,
        "type": "file_version",
        "sha1": "134b65991ed521fcfe4724b7d814ab8ded5185dc"
      },
      "description": "Contract for Q1 renewal",
      "size": 629644,
      "path_collection": {
        "total_count": 1,
        "entries": [
          {
            "id": 12345,
            "etag": 1,
            "type": "folder",
            "sequence_id": 3,
            "name": "Contracts"
          }
        ]
      },
      "created_at": "2012-12-12T10:53:43-08:00",
      "modified_at": "2012-12-12T10:53:43-08:00",
      "trashed_at": "2012-12-12T10:53:43-08:00",
      "purged_at": "2012-12-12T10:53:43-08:00",
      "content_created_at": "2012-12-12T10:53:43-08:00",
      "content_modified_at": "2012-12-12T10:53:43-08:00",
      "created_by": {
        "id": 11446498,
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "modified_by": {
        "id": 11446498,
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "owned_by": {
        "id": 11446498,
        "type": "user",
        "name": "Aaron Levie",
        "login": "ceo@example.com"
      },
      "shared_link": {
        "url": "https://www.box.com/s/vspke7y05sb214wjokpk",
        "download_url": "https://www.box.com/shared/static/rh935iit6ewrmw0unyul.jpeg",
        "vanity_url": "https://acme.app.box.com/v/my_url/",
        "access": "open",
        "effective_access": "company",
        "effective_permission": "can_download",
        "unshared_at": "2018-04-13T13:53:23-07:00",
        "is_password_enabled": true,
        "permissions": {
          "can_download": true,
          "can_preview": true
        },
        "download_count": 3,
        "preview_count": 3
      },
      "parent": {
        "id": 12345,
        "etag": 1,
        "type": "folder",
        "sequence_id": 3,
        "name": "Contracts"
      },
      "item_status": "active",
      "allowed_invitee_roles": [
        "editor"
      ],
      "is_externally_owned": true,
      "has_collaborations": true
    }
  ],
  "total_count": 1
}