ファイル箱では、2つのAPIがあります。

  • ClientGateway(クライアントゲートウェイ) - 一般的な操作+ファイルの閲覧
  • FileCache(ファイルキャッシュ) - ファイルの操作


こちらは、それぞれのAPIのSwaggerドキュメンテーション:

*クライアントゲートウェイのSwaggerドキュメンテーションでは、リクエストとリスポンスのボディーでのJSONのプロパティ名がキャメルケース(camelCase)が、APIを利用すると、実際に全部がパスカルケース(PascalCase)です。


APIを利用する例として、ファイルのダウンロードをアップロードを説明します。


API認証

両方のAPIでは、同じ認証し方を詰まってます。ファイル操作のためには、OAuth認証により、Bearerアクセストークンが必要です。詳細は、ファイル箱のAPIの認証方法を見てください。


ファイル閲覧

ユーザ名demo@tsukaeru.netの「demo - Home Folder」シェアの中で、「Documentation\API.pdf」ファイルを開けたいとしましょう。また、ドメインはcloudfile.jpで、アクセストークン既にン取得して「aedc6.XXXXXX.bc76bcd25」であるとします。


1. シェアをのリストを取得する

まずは、ユーザのシェアを調べます

curl --request GET \
  --url https://clientgateway.cloudfile.jp/api/users/demo@tsukaeru.net/shares \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25'

{
  "Data": [
    {
      "ShareAssociationType": 2,
      "Id": "02a8d989567e4c4c8085637c7aa24569",
      "CompanyId": "28ac608f-7bc7-4bda-9a30-b17f7a38bf22",
      "Name": "demo - Home folder",
      "ShareDefault": {
        "ShareCategory": 0
      },
      "ShareTick": 4654805,
      "SpaceUsage": {
        "DiskUsage": 443851649653,
        "HistoryUsage": 2492305,
        "DeletedUsage": 0
      },
      "ShareType": 0,
      "ShareIds": [],
      "TimeStamps": {
        "CreateTime": 0,
        "CreatedBy": "Admin",
        "UpdateTime": 637975163199430212,
        "UpdatedBy": "demo@tsukaeru.net",
        "DeleteTime": 0,
        "DeletedBy": "Admin"
      }
    },
    {
      "ShareAssociationType": 2,
      "Id": "09d8d6687f2048d3957cba15c3874113",
      "CompanyId": "28ac608f-7bc7-4bda-9a30-b17f7a38bf22",
      "Name": "Other",
      "ShareDefault": {
        "Owner": "admin@tsukaeru.net",
        "ShareCategory": 0
      },
      "ShareTick": 0,
      "SpaceUsage": {
        "DiskUsage": 0,
        "HistoryUsage": 0,
        "DeletedUsage": 0
      },
      "ShareType": 0,
      "ShareIds": [],
      "TimeStamps": {
        "CreateTime": 637910305752536237,
        "CreatedBy": "admin@tsukaeru.net",
        "UpdateTime": 0,
        "DeleteTime": 0
      }
    }
  ],
  "Message": "Ok."
}

レスポンスのDataは、ユーザがアクセスをもつシェアのメタデータになります。こちらで、取得したいシェアをNameで検索して、Idが必要です。今回、「demo - Home Folder」 のシェアのIdは、「02a8d989567e4c4c8085637c7aa24569」です。


2. シェアの中身を取得する

今度、シェアの中で「Documentation」というフォルダを調べます。

curl --request GET \
  --url https://clientgateway.cloudfile.jp/api/shares/02a8d989567e4c4c8085637c7aa24569/children \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25'

{
  "Data": [
    {
      "IsSubshare": false,
      "User": "demo@tsukaeru.net",
      "IsFile": false,
      "FileLock": {
        "IsLocked": false,
        "LockTime": 0
      },
      "InternalName": "271391b5c94243a6887dc8894595eba4",
      "ShareId": "02a8d989567e4c4c8085637c7aa24569",
      "Tick": 3,
      "SubShareIds": [],
      "ShareTick": 4189056,
      "ParrentId": "02a8d989567e4c4c8085637c7aa24569",
      "EndOfFile": 0,
      "PublicName": "Documentation",
      "CreationTime": "2022-06-14T22:50:12.596771Z",
      "LastAccessTime": "2022-06-14T22:50:12.596771Z",
      "LastWriteTime": "2022-06-14T22:50:12.596771Z",
      "Attributes": 16,
      "Deleted": false
    },
    {
      "IsSubshare": false,
      "UploadName": "5f30e77d3e2f434abce0923e96db1b62",
      "User": "demo@tsukaeru.net",
      "IsFile": true,
      "FileLock": {
        "IsLocked": false,
        "LockTime": 0
      },
      "InternalName": "a2d2b5c5cdf6471686c7000f7fba8eb9",
      "ShareId": "02a8d989567e4c4c8085637c7aa24569",
      "Tick": 2,
      "SubShareIds": [],
      "ShareTick": 988555,
      "ParrentId": "02a8d989567e4c4c8085637c7aa24569",
      "EndOfFile": 7836969,
      "PublicName": "php.zip",
      "CreationTime": "2022-06-17T00:27:29.6670491Z",
      "LastAccessTime": "2022-06-17T00:27:29.6670492Z",
      "LastWriteTime": "2022-06-17T00:27:32.7227076Z",
      "Attributes": 32,
      "Deleted": false
    }
  ],
  "Message": "Ok."
}

今度、PublicNameにより、「Documentation」フォルダを検索して、フォルダのInternalNameは「271391b5c94243a6887dc8894595eba4」です。


3. フォルダの中身を取得する

今度、フォルダの中で「API.pdf」ファイルを検索します。

curl --request GET \
  --url https://clientgateway.cloudfile.jp/api/shares/02a8d989567e4c4c8085637c7aa24569/virtualfiles/271391b5c94243a6887dc8894595eba4/children \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25'

{
  "Data": [
    {
      "IsSubshare": false,
      "User": "demo@tsukaeru.net",
      "IsFile": false,
      "FileLock": {
        "IsLocked": false,
        "LockTime": 0
      },
      "InternalName": "b609204a6ed5443a8644d20e38e17fe3",
      "ShareId": "02a8d989567e4c4c8085637c7aa24569",
      "Tick": 1,
      "SubShareIds": [],
      "ShareTick": 985119,
      "ParrentId": "271391b5c94243a6887dc8894595eba4",
      "EndOfFile": 0,
      "PublicName": "Other folder",
      "CreationTime": "2022-06-14T22:50:48.4141003Z",
      "LastAccessTime": "2022-06-14T22:50:48.4141003Z",
      "LastWriteTime": "2022-06-14T22:50:48.4141003Z",
      "Attributes": 16,
      "Deleted": false
    },
    {
      "IsSubshare": false,
      "UploadName": "7bf8fbe91fcf49d181e60476686863f2",
      "User": "demo@tsukaeru.net",
      "IsFile": true,
      "FileLock": {
        "IsLocked": false,
        "LockTime": 0
      },
      "InternalName": "341dcae77da6449682cb4f2e29efeb44",
      "ShareId": "02a8d989567e4c4c8085637c7aa24569",
      "Tick": 2,
      "SubShareIds": [],
      "ShareTick": 985098,
      "ParrentId": "271391b5c94243a6887dc8894595eba4",
      "EndOfFile": 989827,
      "PublicName": "API.pdf",
      "CreationTime": "2022-06-14T22:50:27.7332305Z",
      "LastAccessTime": "2022-06-14T22:50:27.7332305Z",
      "LastWriteTime": "2021-10-19T06:10:22.6930352Z",
      "Attributes": 32,
      "Deleted": false
    }
  ],
  "Message": "Ok."
}

また、PublicNameで探せば、API.pdfファイルのメタデータを分かります。フィアルのInternalNameはユニークなIdであり、UploadNameはデータバージョンのIdになります。


4. ファイルをダウンロードする

ファイルのダウンロードは、ファイルキャッシュAPIにより行います。前のステップで調べたシェアIdとファイルのUploadNameを使って、GETリクエストでダウンロードできます。


curl --request GET \
  --url https://filecache01.cloudfile.jp/api/shares/02a8d989567e4c4c8085637c7aa24569/files/7bf8fbe91fcf49d181e60476686863f2 \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25' \
  --output 'API.pdf'

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  966k  100  966k    0     0  1030k      0 --:--:-- --:--:-- --:--:-- 1029k


ファイルのアップロード

ファイルをアップロードするには、アップロード先のメタデータが必要です。例を簡単にするために、上記のシェアの中で、「文書」というフォルダを作って、250バイトの 「lorem.txt」ファイルをアップロードします。


1. フォルダを作成する

フォルダの作成には、ファイルキャッシュAPIを使います。

curl --request POST \
  --url https://filecache01.cloudfile.jp/api/shares/02a8d989567e4c4c8085637c7aa24569/files \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25' \
  --header 'Content-Type: application/json' \
  --data '{
  "RfVirtualFile": {
    "ShareId": "02a8d989567e4c4c8085637c7aa24569",
    "ShareTick": 0,
    "ParrentId": "271391b5c94243a6887dc8894595eba4",
    "EndOfFile": 0,
    "PublicName": "文書",
    "CreationTime": "2022-09-15T05:12:43.473Z",
    "LastAccessTime": "2022-09-15T05:12:43.474Z",
    "LastWriteTime": "2022-09-15T05:12:43.474Z",
    "Attributes": 16
  },
  "TransmitId": "3e84cc22-4127-4527-8a19-185a6cb70d30",
  "ClientJournalEventType": 0,
  "DeviceId": "TestClient"
}'

{
  "Code": 1,
  "Data": {
    "ClientJournalEvent": {
      "TransmitId": "3e84cc22-4127-4527-8a19-185a6cb70d30",
      "UserOrigin": "demo@tsukaeru.net",
      "ClientJournalEventType": 0,
      "ShareTick": 5021302,
      "TransmitCounter": 0,
      "TransmitTimeout": "2022-09-15T05:51:18.0735966Z",
      "RfVirtualFile": {
        "ShareId": "02a8d989567e4c4c8085637c7aa24569",
        "SubShareIds": [],
        "InternalName": "d9ce0f90f5d54963b24fa259b2f43bbf",
        "Tick": 1,
        "ShareTick": 5021302,
        "UpdateTick": 5021302,
        "CreateTick": 5021302,
        "ParrentId": "271391b5c94243a6887dc8894595eba4",
        "NoOfChildren": 0,
        "EndOfFile": 0,
        "AllocationSize": 0,
        "CreationTime": "2022-09-15T05:12:43.473Z",
        "LastAccessTime": "2022-09-15T05:12:43.474Z",
        "LastWriteTime": "2022-09-15T05:12:43.474Z",
        "Attributes": 16,
        "Local": false,
        "User": "demo@tsukaeru.net",
        "Deleted": false,
        "IsOffline": false,
        "HasHistory": false,
        "PublicName": "文書",
        "DeleteTimestamp": 0,
        "IsFile": false,
        "RetensionTimestamp": 0,
        "InRetension": false,
        "FileLock": {
          "IsLocked": false,
          "LockTime": 0
        }
      },
      "CreateTick": 5021302,
      "DeviceId": "TestClient"
    }
  },
  "Message": "File created succesfully."
}

(リクエストボディーの内容について、Swaggerドキュメンテーションを見てください。)


2. アイルのメタデータをアップロードする

ファイル内容をアップロードし始める前、ファイルのメタデータを作成します。リクエスト先は、フォルダの作成と同じです。

curl --request POST \
  --url https://filecache01.cloudfile.jp/api/shares/02a8d989567e4c4c8085637c7aa24569/files \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25' \
  --header 'Content-Type: application/json' \
  --data '{
  "RfVirtualFile": {
    "ShareId": "02a8d989567e4c4c8085637c7aa24569",
    "ShareTick": 0,
    "ParrentId": "271391b5c94243a6887dc8894595eba4",
    "EndOfFile": 250,
    "PublicName": "lorem.txt",
    "CreationTime": "2022-09-15T05:12:43.473Z",
    "LastAccessTime": "2022-09-15T05:12:43.474Z",
    "LastWriteTime": "2022-09-15T05:12:43.474Z",
    "Attributes": 128
  },
  "TransmitId": "2c6381ac-6484-45cb-8fd4-becfc5af62e1",
  "ClientJournalEventType": 0,
  "DeviceId": "TestClient"
}'

{
  "Code": 1,
  "Data": {
    "Url": "https://filecache01.cloudfile.jp/api/upload/7VrnbX5OnJLt6oyYfZwWPflMoobQgJuV"
  },
  "Message": "'PUT' the content of your file to the supplied url and provide a Content-Range header."
}

返事で、ファイル内容をアップロード先のURLを貰います。

※ファイルが0バイトではない場合だけ、アップロード先URLを貰います。空っぽのファイルを作成する場合、フォルダの作成と同じくすぐに新しいファイルのメタデータが返されます。


3. アイル内容をアップロードする

前のステップ貰ったURLへ、PUTリクエストによりファイルの内容をアップロードする。

curl --request PUT \
  --url https://filecache01.cloudfile.jp/api/upload/7VrnbX5OnJLt6oyYfZwWPflMoobQgJuV \
  --header 'Authorization: Bearer aedc6.XXXXXX.bc76bcd25' \
  --header 'Content-Range: bytes 0-249/250' \
  --data 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam egestas magna sed dui posuere, sed facilisis nibh malesuada. Pellentesque quis nunc quis quam congue posuere placerat nec justo. Praisent congue eu mauris in eleifend. Quisque massa nunc.'

{
  "Code": 1,
  "Data": {
    "ClientJournalEvent": {
      "TransmitId": "2c6381ac-6484-45cb-8fd4-becfc5af62e1",
      "UserOrigin": "demo@tsukaeru.net",
      "ClientJournalEventType": 0,
      "ShareTick": 5020404,
      "TransmitCounter": 0,
      "TransmitTimeout": "2022-09-15T05:48:13.8681754Z",
      "RfVirtualFile": {
        "ShareId": "02a8d989567e4c4c8085637c7aa24569",
        "SubShareIds": [],
        "UploadName": "c7af5b7b619f4cffa7cd4190c49397a5",
        "InternalName": "4c376527202442b19e8c90849d85189d",
        "Tick": 1,
        "ShareTick": 5020404,
        "UpdateTick": 5020404,
        "CreateTick": 5020404,
        "ParrentId": "271391b5c94243a6887dc8894595eba4",
        "NoOfChildren": 0,
        "EndOfFile": 250,
        "AllocationSize": 0,
        "CreationTime": "2022-09-15T05:12:43.473Z",
        "LastAccessTime": "2022-09-15T05:12:43.474Z",
        "LastWriteTime": "2022-09-15T05:12:43.474Z",
        "Attributes": 32,
        "Local": false,
        "User": "demo@tsukaeru.net",
        "Deleted": false,
        "IsOffline": false,
        "HasHistory": false,
        "PublicName": "lorem.txt",
        "DeleteTimestamp": 0,
        "IsFile": true,
        "RetensionTimestamp": 0,
        "InRetension": false,
        "FileLock": {
          "IsLocked": false,
          "LockTime": 0
        }
      },
      "CreateTick": 5020404,
      "DeviceId": "TestClient"
    }
  },
  "Message": "File created succesfully."
}

注意点:

  • データをアップロードする際、Content-Rangeヘッダが必須です。
  • リクエストの大きさが制限されています。一同で150MBぐらいまで送信可能です。150MB以上のファイルを分けて、いくつのリクエストでアップロードする必要です。分けた部分を順番通りに送信してください。
  • 最後のデータをアップロードするリクエストに対してだけ、ファイルのメタデータの返事が来ます。
  • ファイルのアップロードが合わらない限り、クライアントやAPIにてファイルが見えなくて、部分データをアクセス不可能です。