はじめに
/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage
コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
前回の Azure Blob コンポーネントに続き、今回はファイルやフォルダーのアップロード、ダウンロード、その他の管理を容易にする Box.com のサービスに特化した、Box 専用コンポーネント の使用方法について説明します。
Box.com
Box コンポーネントの使用により、Box.com でファイルやフォルダーを簡単にアップロード、ダウンロード、および管理できます。Box コンポーネントは、Box.com で作業するためのシンプルなインターフェイスを提供します。ファイルのアップロードおよびダウンロード、強力な暗号化サポート、フォルダーの作成、リソースの移動やコピーなどの機能が含まれます。
まず、アカウントを作成し、アプリケーションを Box.com に登録します。このプロセスについては、Box.com のドキュメントを参照してください。
認証
認証は、OAuth 2.0 経由で行われます。ツールキットに含まれる OAuth コンポーネントか、その他の OAuth 実装を使用して認証を実行し、認証文字列を取得します。以下のような認証文字列を取得したら、操作を実行する前に、この値を [Authorization] プロパティに割り当てます。
Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ
サポートされる有効範囲の値とOAuth 認証に関する詳細は、この特定のサービスに関するBox.com のドキュメントを参照してください。
OAuth を使った例
[csharp light=”true”] oauth.ClientProfile = OauthClientProfiles.cfApplication;
oauth.ClientId = OAUTH_CLIENT_ID;
oauth.ClientSecret = OAUTH_SECRET_ID;
oauth.RefreshToken = refreshToken;
oauth.ServerAuthURL = "https://app.box.com/api/oauth2/authorize";
oauth.ServerTokenURL = "https://api.box.com/oauth2/token";
oauth.AuthorizationScope = "";
oauth.Config("WebServerPort=7777"); // http://localhost:7777 is a registered redirect_uri for the app
string authString = oauth.GetAuthorization();
box.Authorization = authString;[/csharp]
リソースの一覧表示
ListResourcesは、指定したパスにあるアカウント内のリソースを一覧表示します。
ListResources
は、 ResourceParentId
で指定したフォルダー内のリソースを一覧表示します。ResourceParentId
が指定されていない場合、ルート フォルダーの内容が表示されます。
このメソッドを呼び出した後、ResourceIndex
の値を 0 から ResourceCount
– 1 に設定します。ResourceIndex
を設定すると、他の [Resource] プロパティが設定され、リソースに関する情報が提供されます。
上記の呼び出しにより、次のリソース プロパティが読み込まれます。
ResourceDeleted
ResourceETag
ResourceHash
(フォルダーには適用されない)ResourceId
ResourceMarker
ResourceName
ResourceRevision
ResourceType
結果がページ分割されている場合、ResourceMarker
プロパティが読み込まれます。このメソッドを再度呼び出すことで、結果の次のページが取得できます。結果の最終ページが返されると、ResourceMarker
は空になります。
注: 各リソースのレスポンスで返される特定のフィールド一覧を定義するには、AddQueryParam
を介して”fields” パラメーターを設定します。使用可能なフィールドの完全なリストは、Box のドキュメントを参照してください。
[csharp light=”true”]box.ResourceParentId = "123456";
box.ListResources();
for (int i = 0; i < box.ResourceCount; i++)
{
box.ResourceIndex = i;
Console.WriteLine(box.ResourceName);
}[/csharp]
ファイルのダウンロード
DownloadFile
メソッドでは、特定のファイルをダウンロードします。
DownloadFile
を使うと、ResourceId
で指定したファイルをダウンロードします。このメソッドを呼び出す前に、ResourceId
をダウンロードするファイルの Id に設定します。ファイルは、SetDownloadStream
で設定されたストリームにダウンロードされます。ストリームが指定されていない場合には、ファイルは LocalFile
で設定された場所に保存されます。ストリームとLocalFile
のいずれも指定されていない場合には、ファイルのデータは ResourceData
に保留されます。
暗号化されたファイルを復号するには、このメソッドを呼び出す前に EncryptionAlgorithm
と EncryptionPassword
を設定します。
[csharp light=”true”]box.ResourceId = "50619395801"
box.LocalFile = "../MyFile.zip";
box.DownloadFile();[/csharp]
ダウンロードの再開
このコンポーネントは、StartByte
プロパティを使うことにより、失敗したダウンロードの再開もサポートしています。ダウンロードが中断した場合は、StartByte
を適切なオフセットに設定してから、このメソッドを呼び出してダウンロードを再開します。
[csharp light=”true”]box.ResourceId = myId;
box.LocalFile = downloadFile;
box.DownloadFile();
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download file
box.StartByte = new FileInfo(downloadFile).Length;
box.ResourceId = myId;
box.LocalFile = downloadFile;
box.DownloadFile();[/csharp]
暗号化されたファイルのダウンロードの再開
暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile
を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に、LocalFile
が設定されていれば、TempPath
に一時ファイルが作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。
ダウンロードが中断された場合、DownloadTempFile
には部分データを保持する一時ファイルが設定されます。ダウンロードを再開する時には、暗号化された残りのデータをダウンロードするために、DownloadTempFile
および StartByte
の入力が必要となります。ダウンロードが完了すると、データは復号され、LocalFile
に書き込まれます。
[csharp light=”true”]box.ResourceId = myId;
box.LocalFile = downloadFile;
box.EncryptionPassword = "password";
box.DownloadFile();
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download temp file
box.StartByte = new FileInfo(box.Config("DownloadTempFile")).Length;
box.ResourceId = myId;
box.LocalFile = downloadFile;
box.EncryptionPassword = "password";
box.DownloadFile();[/csharp]
ファイルのアップロード
UploadFile
を使うと、ResourceParentId
で指定したファイルをアップロードします。ResourceParentId
が指定されていない場合、ファイルはルート ディレクトリにアップロードされます。このメソッドは、アップロードされたファイルの Id を返します。すでにファイルが存在する場合には、サーバーはエラーを返します。
FileName パラメーターでは、ファイル名を指定します。名前付けには次の制限があります。
- ファイル名は 255 文字以下にする必要があります。
- ファイル名に、印字できない ASCII 文字を入れることはできません。
- ファイル名に “/” や “\” などの文字や、末尾の空白を入れることはできません。
- “.” や “..” などの特別なファイル名は使用できません。
LocalFile
でアップロードするファイルを指定します。アップロードするデータは、ResourceData
や SetUploadStream
でも設定できます。ファイルを暗号化するには、EncryptionAlgorithm
や EncryptionPassword
を使用します。
UploadFile
を呼び出す際には、次のプロパティが適用されます。
- LocalFile
- ResourceData
- ResourceParentId
- EncryptionAlgorithm
- EncryptionPassword
[csharp light=”true”]box.LocalFile = "../MyFile.zip";
box.UploadFile("MyFile.zip");[/csharp]
ファイルをアップロードすると、Resource プロパティにアップロードされたファイルの情報が読み込まれます。
その他の機能
Box コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
EncryptionAlgorithm
とEncryptionPassword
を使ってファイルを暗号化、および復号するCreateMetadata
、UpdateMetadata
、DeleteMetadata
を使ってリソースのメタデータを作成、管理するShareResource
でコンテンツの共有リンクを作成するSearch
を使って一致するコンテンツを検索するListRevisions
およびPromoteRevision
で変更履歴をサポートListDeletedResources
およびRestoreResource
を使ってファイルの削除を取り消すGetAccountInfo
で使用状況およびアカウント情報を取得GetPreviewLink
およびGetThumbnail
でファイルのプレビュー情報を取得する- その他
/n software 製品の詳細は、こちら をご覧ください。