はじめに
/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
プロパティが読み込まれます。
ResourceCount
ResourceId
ResourceMarker
ResourceModifiedDate
ResourceName
ResourcePath
ResourceRevision
ResourceType
ResourceType
が 1 (rtFolder) の場合、次のプロパティのみが適用可能です。
ResourceCount
ResourceId
ResourceMarker
ResourceName
ResourcePath
ResourceType
結果がページ分割されている場合、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
の場合に適用することができます(デフォルトは簡易アップロードです)。
LocalFile
ResourceData
ResourcePath
Overwrite
RenameIfExists
アップロード再開の有効化
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
の場合に適用することができます。
LocalFile
ResourceData
ResourcePath
Overwrite
RenameIfExists
StartByte
UploadSessionId
その他の機能
Dropbox コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
EncryptionAlgorithm
とEncryptionPassword
を使ってファイルを暗号化、および復号するCopyResource
、MoveResource
、DeleteResource
を使ってファイルとフォルダーを管理するShareResource
でコンテンツの共有リンクを作成するListChanges
で特定のポイントからフォルダー内のすべての変更をリストしてローカル とリモート コピーの同期を容易にするSearch
を使って一致するコンテンツを検索するListRevisions
およびRestoreResource
で変更履歴をサポートGetUsageInfo
およびGetAccountInfo
で使用状況およびアカウント情報を取得GetPreview
およびGetThumbnail
でファイルのプレビュー情報を取得する- その他
/n software 製品の詳細は、こちら をご覧ください。