/n software Cloud Storage Integrator の使用方法: Dropbox

はじめに

/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] プロパティに割り当てます。

Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ

サポートされるスコープ値および OAuth 認証に関する詳細は、この特定のサービスに関する Dropbox のドキュメントを参照してください。

OAuth を使った例

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;

リソースの一覧表示

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 に設定します。

dropbox.ResourcePath = "/New Folder";
dropbox.ListResources();
for (int i = 0; i < dropbox.ResourceCount; i++)
{
dropbox.ResourceIndex = i;
Console.WriteLine(dropbox.ResourceName + ": " + dropbox.ResourceSize);
}

ファイルのダウンロード

DownloadFile メソッドでは、特定のファイルをダウンロードします。

ダウンロードするには、このメソッドを呼び出す前に、ResourcePath をファイルの絶対パスに設定します。ファイルは、SetDownloadStream で指定されたストリームにダウンロードされます。ストリームが指定されていない場合、ファイルは LocalFile で指定された場所に保存されます。ストリームとLocalFile のいずれも指定されていない場合、ファイルのデータは ResourceData に保留されます。

暗号化されたファイルを復号するには、このメソッドを呼び出す前に EncryptionAlgorithmEncryptionPassword を設定します。

dropbox.ResourcePath = "/My Folder/photos.zip"
dropbox.LocalFile = "../MyFile.zip";
dropbox.DownloadFile();
ダウンロードの再開

このコンポーネントは、StartByte プロパティを使うことにより、失敗したダウンロードの再開もサポートしています。ダウンロードが中断した場合は、StartByte を適切なオフセットに設定してから、このメソッドを呼び出してダウンロードを再開します。

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();
暗号化されたファイルのダウンロードの再開

暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に LocalFile が設定されている場合、TempPath にファイルが一時的に作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。

ダウンロードが中断された場合、DownloadTempFile には部分データを保持するファイルが一時的に設定されます。ダウンロードを再開する場合、暗号化された残りのデータをダウンロードするために、DownloadTempFile および StartByte の入力が必要となります。ダウンロードが完了すると、データは復号され、LocalFile に書き込まれます。

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();

ファイルのアップロード

LocalFile は、アップロードするファイルを指定します。アップロードするデータは、ResourceData または SetUploadStream 内で設定することができます。

UploadFileFileName パラメーターは、書き込まれるファイルの名前を指定します。

ファイルのアップロード先のフォルダーは、FileName パラメーター内で絶対パスを指定するか、フォルダーへ ResourcePath を設定することで指定できます。絶対パスは、”/” から始まり、ルートから始まるフル パスを含める必要があります。以下は例になります。

//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"

ファイルを暗号化するには、アップロードする前に、EncryptionAlgorithm
および EncryptionPassword を設定します。

アップロードが完了すると、コンポーネントで UploadComplete イベントが発生し、UploadFile はアップロードされたファイルへの絶対パスを返します。

ノートのアップロード

Dropbox は、ファイルをアップロードするための 2 つの方法を提供します。容量の小さいファイルには、1 つの要求でデータをアップロードできる簡単なアップロードのオプションを提供します。これは、デフォルトのオプションになります。容量の大きいファイルの場合、アップロードは複数に分割され、中断される可能性のあるアップロードの再開を可能にします。

簡易性

デフォルトでは、コンポーネントは簡単なアップロード メカニズムを使用します。SetUploadStream が使用されます。

dropbox.LocalFile = "../MyFile.zip";
dropbox.UploadFile("/folder/MyFile.zip"

次のプロパティは、UploadFile および UseResumableUpload を呼び出し、False の場合に適用することができます(デフォルトは簡易アップロードです)。

  • LocalFile
  • ResourceData
  • ResourcePath
  • Overwrite
  • RenameIfExists
アップロード再開の有効化

UseResumableUploadTrue に設定して、アップロードの再開を有効化します。これは、容量の大きいファイルで推奨されます。コンポーネントは、指定されたファイルを自動的に分割し、個別にアップロードします。必要に応じて FragmentSize を設定して、断片のサイズを指定することもできます。デフォルトでは、10 MB に設定されています。

UseResumableUploadTrue に設定され、UploadFile が呼び出された場合、コンポーネントによってアップロード再開のセッションが開始します。
UploadSessionID には、セッションの ID が入力されます。この値は、アップロードが正常に完了しない場合、追加操作で必要になる場合があります。さらに、StarByte は、コンポーネントによって必要に応じて更新され、ファイル内の現在のオフセットを示します。

何かしらの理由でアップロードが中断された場合、アップロードを再開することができます。アップロードを再開するには、UploadSessionID および StarByte が入力されていることを確認します。コンポーネントの同じインスタンスが使用されている場合、これらのコンポーネントはすでに実装されているため、特別な操作は必要ありません。UploadFile を再度呼び出し、指定された StarByte オフセットでアップロードを再開します。

すべての断片がアップロードされると、FragmentComplete イベントが発生し、全体の進捗を表示します。

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");

次のプロパティは、UploadFile および UseResumableUpload
True の場合に適用することができます。

  • LocalFile
  • ResourceData
  • ResourcePath
  • Overwrite
  • RenameIfExists
  • StartByte
  • UploadSessionId

その他の機能

Dropbox コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。

  • EncryptionAlgorithmEncryptionPassword を使ってファイルを暗号化、および復号する
  • CopyResourceMoveResourceDeleteResource を使ってファイルとフォルダーを管理する
  • ShareResource でコンテンツの共有リンクを作成する
  • ListChanges で特定のポイントからフォルダー内のすべての変更をリストしてローカル とリモート コピーの同期を容易にする
  • Search を使って一致するコンテンツを検索する
  • ListRevisions および RestoreResource で変更履歴をサポート
  • GetUsageInfo および GetAccountInfo で使用状況およびアカウント情報を取得
  • GetPreview および GetThumbnail でファイルのプレビュー情報を取得する
  • その他

/n software 製品の詳細は、こちら をご覧ください。