はじめに
/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
前回の CloudStorage コンポーネントに続き、今回は簡単なインターフェイスでファイルやフォルダーのアップロードおよびダウンロードし、強力な暗号化もサポートする Dropbox のサービスに特化した、Dropbox 専用コンポーネント の使用方法について説明します。
Dropbox
Dropbox コンポーネントは、Dropbox を操作するための簡単なインターフェイスを提供します。ファイルのアップロードおよびダウンロード、強力な暗号化サポート、フォルダーの作成、リソースの移動およびコピーなどの機能が含まれます。
まず、アカウントを開設して、アプリケーションを Dropbox に登録します。このプロセスについては、Dropbox のドキュメントを参照してください。
認証
認証は、OAuth 2.0 経由で行われます。ツールキットに含まれる OAuth コンポーネントか、その他の OAuth 実装を使用して認証を実行し、認証文字列を取得します。以下のような認証文字列を取得したら、操作を実行する前に、この値を [Authorization] プロパティに割り当てます。
[csharp light=”true”]Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ[/csharp]
サポートされるスコープ値および OAuth 認証に関する詳細は、この特定のサービスに関する Dropbox のドキュメントを参照してください。
OAuth を使った例
[csharp light=”true”]oauth.ClientProfile = OauthClientProfiles.cfApplication;
oauth.ClientId = OAUTH_CLIENT_ID;
oauth.ClientSecret = OAUTH_SECRET_ID;
oauth.RefreshToken = refreshToken;
oauth.ServerAuthURL = "https://www.dropbox.com/1/oauth2/authorize";
oauth.ServerTokenURL = "https://api.dropboxapi.com/1/oauth2/token";
oauth.AuthorizationScope = "";
oauth.Config("WebServerPort=7777"); // http://localhost:7777 is a registered redirect_uri for the app
string authString = oauth.GetAuthorization();
dropbox.Authorization = authString;[/csharp]
リソースの一覧表示
ListResources は、指定したパスにあるアカウント内のリソースを一覧表示します。
このメソッドを呼び出す前に、フォルダーのフル パスへ ResourcePath を設定してリストします。ResourcePath が指定されていない場合、ルート フォルダーの内容が表示されます。
このメソッドを呼び出した後、ResourceIndex の値を 0 から ResourceCount – 1 に設定します。ResourceIndex を設定すると、他の Resource プロパティが設定され、リソースに関する情報が提供されます。
上記の呼び出しにより、次の Resource プロパティが読み込まれます。
ResourceCountResourceIdResourceMarkerResourceModifiedDateResourceNameResourcePathResourceRevisionResourceType
ResourceType が 1 (rtFolder) の場合、次のプロパティのみが適用可能です。
ResourceCountResourceIdResourceMarkerResourceNameResourcePathResourceType
結果がページ分割されている場合、ResourceMarker プロパティが読み込まれます。このメソッドを再度呼び出すことで、結果の次のページが取得できます。結果の最終ページが返されると、ResourceMarker は空になります。
デフォルトでは、指定された ResourcePath のリソースのみが返されます。サブフォルダー内のファイルをリストするには、RecurseSubfolders の値を True に設定します。
[csharp light=”true”]dropbox.ResourcePath = "/New Folder";
dropbox.ListResources();
for (int i = 0; i < dropbox.ResourceCount; i++)
{
dropbox.ResourceIndex = i;
Console.WriteLine(dropbox.ResourceName + ": " + dropbox.ResourceSize);
}[/csharp]
ファイルのダウンロード
DownloadFile メソッドでは、特定のファイルをダウンロードします。
ダウンロードするには、このメソッドを呼び出す前に、ResourcePath をファイルの絶対パスに設定します。ファイルは、SetDownloadStream で指定されたストリームにダウンロードされます。ストリームが指定されていない場合、ファイルは LocalFile で指定された場所に保存されます。ストリームとLocalFile のいずれも指定されていない場合、ファイルのデータは ResourceData に保留されます。
暗号化されたファイルを復号するには、このメソッドを呼び出す前に EncryptionAlgorithm と EncryptionPassword を設定します。
[csharp light=”true”]dropbox.ResourcePath = "/My Folder/photos.zip"
dropbox.LocalFile = "../MyFile.zip";
dropbox.DownloadFile();[/csharp]
ダウンロードの再開
このコンポーネントは、StartByte プロパティを使うことにより、失敗したダウンロードの再開もサポートしています。ダウンロードが中断した場合は、StartByte を適切なオフセットに設定してから、このメソッドを呼び出してダウンロードを再開します。
[csharp light=”true”]dropbox.ResourcePath = myRemoteFile;
dropbox.LocalFile = downloadFile;
dropbox.DownloadFile();
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download file
dropbox.StartByte = new FileInfo(downloadFile).Length;
dropbox.ResourcePath = myRemoteFile;
dropbox.LocalFile = downloadFile;
dropbox.DownloadFile();[/csharp]
暗号化されたファイルのダウンロードの再開
暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に LocalFile が設定されている場合、TempPath にファイルが一時的に作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。
ダウンロードが中断された場合、DownloadTempFile には部分データを保持するファイルが一時的に設定されます。ダウンロードを再開する場合、暗号化された残りのデータをダウンロードするために、DownloadTempFile および StartByte の入力が必要となります。ダウンロードが完了すると、データは復号され、LocalFile に書き込まれます。
[csharp light=”true”]dropbox.ResourcePath = myRemoteFile;
dropbox.LocalFile = downloadFile;
dropbox.EncryptionPassword = "password";
dropbox.DownloadFile();
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download temp file
dropbox.StartByte = new FileInfo(dropbox.Config("DownloadTempFile")).Length;
dropbox.ResourcePath = myRemoteFile;
dropbox.LocalFile = downloadFile;
dropbox.EncryptionPassword = "password";
dropbox.DownloadFile();[/csharp]
ファイルのアップロード
LocalFile は、アップロードするファイルを指定します。アップロードするデータは、ResourceData または SetUploadStream 内で設定することができます。
UploadFile の FileName パラメーターは、書き込まれるファイルの名前を指定します。
ファイルのアップロード先のフォルダーは、FileName パラメーター内で絶対パスを指定するか、フォルダーへ ResourcePath を設定することで指定できます。絶対パスは、”/” から始まり、ルートから始まるフル パスを含める必要があります。以下は例になります。
[csharp light=”true”]//Upload to the root folder
dropbox.ResourcePath = "";
string path = dropbox.UploadFile("test.txt");
//path is "/test.txt"
//Upload to a folder (relative path)
dropbox.CreateFolder("/uploadtest");
path = dropbox.UploadFile("test.txt");
//path is "/uploadtest/test.txt"
//Upload to a folder (absolute path)
path = dropbox.UploadFile("/uploadtest/test.txt");
//path is "/uploadtest/test.txt"[/csharp]
ファイルを暗号化するには、アップロードする前に、EncryptionAlgorithm
および EncryptionPassword を設定します。
アップロードが完了すると、コンポーネントで UploadComplete イベントが発生し、UploadFile はアップロードされたファイルへの絶対パスを返します。
ノートのアップロード
Dropbox は、ファイルをアップロードするための 2 つの方法を提供します。容量の小さいファイルには、1 つの要求でデータをアップロードできる簡単なアップロードのオプションを提供します。これは、デフォルトのオプションになります。容量の大きいファイルの場合、アップロードは複数に分割され、中断される可能性のあるアップロードの再開を可能にします。
簡易性
デフォルトでは、コンポーネントは簡単なアップロード メカニズムを使用します。SetUploadStream が使用されます。
[csharp light=”true”]dropbox.LocalFile = "../MyFile.zip";
dropbox.UploadFile("/folder/MyFile.zip"[/csharp]
次のプロパティは、UploadFile および UseResumableUpload を呼び出し、False の場合に適用することができます(デフォルトは簡易アップロードです)。
LocalFileResourceDataResourcePathOverwriteRenameIfExists
アップロード再開の有効化
UseResumableUpload を True に設定して、アップロードの再開を有効化します。これは、容量の大きいファイルで推奨されます。コンポーネントは、指定されたファイルを自動的に分割し、個別にアップロードします。必要に応じて FragmentSize を設定して、断片のサイズを指定することもできます。デフォルトでは、10 MB に設定されています。
UseResumableUpload が True に設定され、UploadFile が呼び出された場合、コンポーネントによってアップロード再開のセッションが開始します。
UploadSessionID には、セッションの ID が入力されます。この値は、アップロードが正常に完了しない場合、追加操作で必要になる場合があります。さらに、StarByte は、コンポーネントによって必要に応じて更新され、ファイル内の現在のオフセットを示します。
何かしらの理由でアップロードが中断された場合、アップロードを再開することができます。アップロードを再開するには、UploadSessionID および StarByte が入力されていることを確認します。コンポーネントの同じインスタンスが使用されている場合、これらのコンポーネントはすでに実装されているため、特別な操作は必要ありません。UploadFile を再度呼び出し、指定された StarByte オフセットでアップロードを再開します。
すべての断片がアップロードされると、FragmentComplete イベントが発生し、全体の進捗を表示します。
[csharp light=”true”]dropbox.LocalFile = "../MyFile.zip";
dropbox.UploadFile("MyFile.zip");
//The transfer is interrupted and UploadFile() above fails. Later, resume the download.
//Using the same instance StartByte and UploadSessionId are already populated
//from the previous upload attempt
dropbox.UploadFile("MyFile.zip");[/csharp]
次のプロパティは、UploadFile および UseResumableUpload が
True の場合に適用することができます。
LocalFileResourceDataResourcePathOverwriteRenameIfExistsStartByteUploadSessionId
その他の機能
Dropbox コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
EncryptionAlgorithmとEncryptionPasswordを使ってファイルを暗号化、および復号するCopyResource、MoveResource、DeleteResourceを使ってファイルとフォルダーを管理するShareResourceでコンテンツの共有リンクを作成するListChangesで特定のポイントからフォルダー内のすべての変更をリストしてローカル とリモート コピーの同期を容易にするSearchを使って一致するコンテンツを検索するListRevisionsおよびRestoreResourceで変更履歴をサポートGetUsageInfoおよびGetAccountInfoで使用状況およびアカウント情報を取得GetPreviewおよびGetThumbnailでファイルのプレビュー情報を取得する- その他
/n software 製品の詳細は、こちら をご覧ください。


