Box Developerドキュメント

ファイルバージョンをアップロード

post
https://upload.box.com/api/2.0
/files/:file_id/content

ファイルのコンテンツを更新します。ファイルサイズが50 MBを超える場合は、分割アップロードAPIを使用することをお勧めします。

本文のattributes部分はfile部分のに置く必要があります。ファイルのアップロード時にリクエストがこの形式に従っていない場合は、HTTP 400エラーとmetadata_after_file_contentsエラーコードが返されます。

リクエスト

bearer [ACCESS_TOKEN]
multipart/form-data

パスパラメータ

stringパス内必須
12345

ファイルを表す一意の識別子。

ファイルIDを確認するには、ウェブアプリケーションでファイルにアクセスして、URLからIDをコピーします。たとえば、URLがhttps://*.app.box.com/files/123の場合、file_id123です。

クエリパラメータ

string arrayクエリ内省略可能
id,type,name

レスポンスに含める属性のコンマ区切りリスト。このパラメータを使用すると、標準のレスポンスには通常含まれないフィールドをリクエストできます。

このパラメータを指定すると、明示的に指定しない限り標準フィールドはレスポンスに含まれず、リクエストしたフィールドのほかには、Mini版の表示のフィールドしか返されないことに注意してください。

リクエスト本文

object本文内

アップロードされるファイルの追加の属性。主に名前と親フォルダ。これらの属性はマルチパートリクエスト本文に含まれており、JSON形式です。

本文のattributes部分はfile部分のに置く必要があります。ファイルのアップロード時にリクエストがこの形式に従っていない場合は、HTTP 400エラーとmetadata_after_file_contentsエラーコードが返されます。

string (date-time)本文内必須
"2012-12-12T10:53:43-08:00"

ファイルが最後に変更された日時を示します。

設定されていない場合は、アップロード日時が使用されます。

string本文内必須
"Photo 2.0.png"

ファイルの新しい名前 (省略可)。指定した場合は、新しいバージョンがアップロードされると、ファイル名が変更されます。

string (binary)本文内必須

Boxにアップロードするファイルのコンテンツ。

本文のattributes部分はfile部分のに置く必要があります。ファイルのアップロード時にリクエストがこの形式に従っていない場合は、HTTP 400エラーとmetadata_after_file_contentsエラーコードが返されます。

リクエストヘッダー

stringヘッダー内省略可能
134b65991ed521fcfe4724b7d814ab8ded5185dc

ファイルが転送中に破損していないことを確認するための、ファイルのSHA1ハッシュを含むヘッダー (省略可)。

stringヘッダー内省略可能
1

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

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

レスポンス

application/jsonFiles

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

If-Matchヘッダーがファイルの現在のetag値と一致しない場合にエラーを返します。これは、ファイルが前回リクエストされたときから変更されていることを示します。

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

post
ファイルバージョンをアップロード
このドキュメント内で一部のAPIを試せるようになりました。
ログイン

リクエストの例

cURL
curl -i -X POST "https://upload.box.com/api/2.0/files/12345/content" \
     -H "authorization: Bearer <ACCESS_TOKEN>" \
     -H "content-type: multipart/form-data" \
     -F attributes='{"name":"Contract.pdf", "parent":{"id":"11446498"}}' \
     -F file=@<FILE_NAME>
TypeScript Gen
await client.uploads.uploadFileVersion(file.id, {
  attributes: {
    name: file.name!,
  } satisfies UploadFileVersionRequestBodyAttributesField,
  file: generateByteStream(20),
} satisfies UploadFileVersionRequestBody);
Python Gen
client.uploads.upload_file_version(
    file.id, UploadFileVersionAttributes(name=file.name), generate_byte_stream(20)
)
.NET Gen
await client.Uploads.UploadFileVersionAsync(fileId: file.Id, requestBody: new UploadFileVersionRequestBody(attributes: new UploadFileVersionRequestBodyAttributesField(name: NullableUtils.Unwrap(file.Name)), file: Utils.GenerateByteStream(size: 20)));
Java
BoxFile file = new BoxFile(api, "id");
FileInputStream stream = new FileInputStream("My File.txt");
file.uploadNewVersion(stream);
Python
file_id = '11111'
file_path = '/path/to/file.pdf'

updated_file = client.file(file_id).update_contents(file_path)
print(f'File "{updated_file.name}" has been updated')
.NET
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
    BoxFile file = await client.FilesManager
        .UploadNewVersionAsync("File v2.pdf", "11111", fileStream);
}
Node
var fs = require('fs');
var stream = fs.createReadStream('/path/to/file.pdf');
client.files.uploadNewFileVersion('11111', stream)
	.then(file => {
        /* file -> {
            total_count: 1,
            entries: 
            [ { type: 'file',
                id: '11111',
                file_version: 
                    { type: 'file_version',
                    id: '22222',
                    sha1: '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33' },
                sequence_id: '0',
                etag: '0',
                sha1: '0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33',
                name: 'My File.pdf',
                description: '',
                size: 68431,
                path_collection: 
                    { total_count: 1,
                    entries: 
                    [ { type: 'folder',
                        id: '0',
                        sequence_id: null,
                        etag: null,
                        name: 'All Files' } ] },
                created_at: '2017-05-16T15:18:02-07:00',
                modified_at: '2017-05-16T15:18:02-07:00',
                trashed_at: null,
                purged_at: null,
                content_created_at: '2017-05-16T15:18:02-07:00',
                content_modified_at: '2017-05-16T15:18:02-07:00',
                created_by: 
                    { type: 'user',
                    id: '33333',
                    name: 'Test User',
                    login: 'test@example.com' },
                modified_by: 
                    { type: 'user',
                    id: '33333',
                    name: 'Test User',
                    login: 'test@example.com' },
                owned_by: 
                    { type: 'user',
                    id: '33333',
                    name: 'Test User',
                    login: 'test@example.com' },
                shared_link: null,
                parent: 
                    { type: 'folder',
                    id: '0',
                    sequence_id: null,
                    etag: null,
                    name: 'All Files' }
                item_status: 'active' } ] }
        */
    })
iOS
let data = "updated file content".data(using: .utf8)
let task: BoxUploadTask = client.files.uploadVersion(
    forFile: "11111",
    name: "New file name.txt",
    contentModifiedAt: "2019-08-07T09:19:13-07:00",
    data: data
) { (result: Result<File, BoxSDKError>) in
    guard case let .success(file) = result else {
        print("Error uploading file version")
        return
    }

    print("New version of \(file.name) was uploaded")
}

// To cancel upload
if someConditionIsSatisfied {
    task.cancel()
}

レスポンスの例

{
  "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/",
        "vanity_name": "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,
          "can_edit": false
        },
        "download_count": 3,
        "preview_count": 3
      },
      "parent": {
        "id": "12345",
        "etag": "1",
        "type": "folder",
        "sequence_id": "3",
        "name": "Contracts"
      },
      "item_status": "active",
      "version_number": "1",
      "comment_count": 10,
      "permissions": {
        "can_delete": true,
        "can_download": true,
        "can_invite_collaborator": true,
        "can_rename": true,
        "can_set_share_access": true,
        "can_share": true,
        "can_annotate": true,
        "can_comment": true,
        "can_preview": true,
        "can_upload": true,
        "can_view_annotations_all": true,
        "can_view_annotations_self": true
      },
      "tags": [
        "approved"
      ],
      "lock": {
        "id": "11446498",
        "type": "lock",
        "created_by": {
          "id": "11446498",
          "type": "user",
          "name": "Aaron Levie",
          "login": "ceo@example.com"
        },
        "created_at": "2012-12-12T10:53:43-08:00",
        "expired_at": "2012-12-12T10:53:43-08:00",
        "is_download_prevented": true,
        "app_type": "office_wopiplus"
      },
      "extension": "pdf",
      "is_package": true,
      "expiring_embed_link": {
        "access_token": "c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ",
        "expires_in": 3600,
        "token_type": "bearer",
        "restricted_to": [
          {
            "scope": "item_download",
            "object": {
              "id": "12345",
              "etag": "1",
              "type": "folder",
              "sequence_id": "3",
              "name": "Contracts"
            }
          }
        ],
        "url": "https://cloud.app.box.com/preview/expiring_embed/..."
      },
      "watermark_info": {
        "is_watermarked": true
      },
      "is_accessible_via_shared_link": true,
      "allowed_invitee_roles": [
        "editor"
      ],
      "is_externally_owned": true,
      "has_collaborations": true,
      "metadata": {
        "enterprise_27335": {
          "marketingCollateral": {
            "$canEdit": true,
            "$id": "01234500-12f1-1234-aa12-b1d234cb567e",
            "$parent": "folder_59449484661",
            "$scope": "enterprise_27335",
            "$template": "marketingCollateral",
            "$type": "properties-6bcba49f-ca6d-4d2a-a758-57fe6edf44d0",
            "$typeVersion": 2,
            "$version": 1
          }
        }
      },
      "expires_at": "2012-12-12T10:53:43-08:00",
      "representations": {
        "entries": [
          {
            "content": {
              "url_template": "https://dl.boxcloud.com/api/2.0/internal_files/123/versions/345/representations/png_paged_2048x2048/content/{+asset_path}?watermark_content=4567"
            },
            "info": {
              "url": "https://api.box.com/2.0/internal_files/123/versions/345/representations/png_paged_2048x2048"
            },
            "properties": {
              "dimensions": "2048x2048",
              "paged": true,
              "thumb": true
            },
            "representation": "png",
            "status": {
              "state": "success"
            }
          }
        ]
      },
      "classification": {
        "name": "Top Secret",
        "definition": "Content that should not be shared outside the company.",
        "color": "#FF0000"
      },
      "uploader_display_name": "Ellis Wiggins",
      "disposition_at": "2012-12-12T10:53:43-08:00",
      "shared_link_permission_options": [
        "can_preview"
      ],
      "is_associated_with_app_item": true
    }
  ],
  "total_count": 1
}