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

/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。

このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage コンポーネントから成っています。

Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。

今回は、OneDrive コンポーネントの使用方法について説明します。

OneDrive

OneDrive コンポーネントは、Microsoft OneDrive を操作するための簡単なインターフェイスを提供します。ファイルのアップロードおよびダウンロード、強力な暗号化サポート、フォルダーの作成、リソースの移動およびコピーなどの機能が含まれます。
まず、アカウントを開設して、アプリケーションを OneDrive に登録します。このプロセスについては、OneDrive のドキュメントを参照してください。

認証

認証は、OAuth 2.0 経由で行われます。ツールキットに含まれる OAuth コンポーネントか、その他の OAuth 実装を使用して認証を実行し、認証文字列を取得します。以下のような認証文字列を取得したら、操作を実行する前に、この値を [Authorization] プロパティに割り当てます。

Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ

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

OAuthを使った例

 auth.ClientProfile = OauthClientProfiles.cfApplication;
oauth.ClientId = OAUTH_CLIENT_ID;
oauth.ClientSecret = OAUTH_SECRET_ID;
oauth.RefreshToken = refreshToken;
 
oauth.AuthorizationScope = "wl.offline_access wl.basic wl.skydrive_update";
oauth.ServerAuthURL = "https://login.live.com/oauth20_authorize.srf";
oauth.ServerTokenURL = "https://login.live.com/oauth20_token.srf";
 
oauth.Config("WebServerPort=7777"); // http://localhost:7777 is a registered redirect_uri for the app
 
string authString = oauth.GetAuthorization();
 
onedrive.Authorization = authString;

リソースの一覧表示

ListResources は、指定したパスのドライブ内のリソースを一覧表示します。
ResourceParentId または ResourceParentPath を指定しないでこのメソッドを呼び出した場合には、ドライブのルートにあるすべてのリソースを一覧表示します。特定のフォルダーのリソースを表示するには、このメソッドを呼び出す前に ResourceParentIdResourceParentPath のいずれかを設定します。ResourceParentId を設定すると、ResourceParentPath よりも優先されます。
ResourceParentIdResourceParentPath のいずれかが設定されていると、指定された親フォルダーの子が一覧表示されます。このメソッドを呼び出す前にこれらの 2 つのプロパティを設定すると、ドライブに移動できます。どちらも指定されている場合には、ResourceParentId が優先されます。どちらも指定されていない場合には、ドライブのルートが仮定されます。
このメソッドを呼び出した後、 ResourceIndex の値を 0 から ResourceCount – 1 に設定します。ResourceIndex を設定すると、その他の Resource プロパティが設定され、リソースに関する情報が提供されます。上記の呼び出しにより、次のリソース プロパティが読み込まれます。
ResourceCount
ResourceCRC32Hash
ResourceCreatedDate
ResourceData
ResourceDeleted
ResourceDescription
ResourceDownloadURL
ResourceETag
ResourceId
ResourceIndex
ResourceMarker
ResourceMIMEType
ResourceModifiedDate
ResourceName
ResourceParentId
ResourceParentPath
ResourcePath
ResourceSHA1Hash
ResourceSize
ResourceType
ResourceWebURL

結果がページ分割されている場合、ResourceMarker が読み込まれます。ListResources を再度呼び出すことにより、結果の次のページが取得できます。ListResources の呼び出しにより、すべてのページを取得すると、ResourceMarker は空の文字列を返します。

onedrive.ListResources();
for (int i = 0; i < onedrive.ResourceCount; i++)
{
onedrive.ResourceIndex = i;
Console.WriteLine(onedrive.ResourceName);
Console.WriteLine(onedrive.ResourceSize);
Console.WriteLine(onedrive.ResourceModifiedDate);
}

ファイルのダウンロード

特定のファイルをダウンロードするには、 DownloadFile メソッドを使用します。
ダウンロードするファイルを指定するには、次のいずれかのプロパティを設定します。
ResourceId
ResourcePath
ResourceDownloadURL

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

onedrive.ResourceId = fileId;
onedrive.LocalFile = "../MyFile.zip";
onedrive.DownloadFile();

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

onedrive.ResourceId = fileId;
onedrive.LocalFile = downloadFile;
onedrive.DownloadFile();
 
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
 
//Get the size of the partially download file
onedrive.StartByte = new FileInfo(downloadFile).Length;
onedrive.ResourceId = fileId;
onedrive.LocalFile = downloadFile;
onedrive.DownloadFile();

暗号化されたファイルのダウンロードの再開

暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に LocalFile が設定されていれば、TempPath に一時ファイルが作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。
ダウンロードが中断された場合、DownloadTempFile には部分データを保持する一時ファイルが読み込まれます。ダウンロードを再開する場合、暗号化された残りのデータをダウンロードするために、DownloadTempFile および StartByte の入力が必要となります。暗号化されたデータがダウンロードされると、復号後に LocalFile に書き込まれます。

onedrive.ResourceId = fileId;
onedrive.LocalFile = downloadFile;
onedrive.EncryptionPassword = "password";
onedrive.DownloadFile();
 
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
 
//Get the size of the partially download temp file
onedrive.StartByte = new FileInfo(onedrive.Config("DownloadTempFile")).Length;
onedrive.ResourceId = fileId;
onedrive.LocalFile = downloadFile;
onedrive.EncryptionPassword = "password";
onedrive.DownloadFile();

ファイルのアップロード

LocalFile を使ってアップロードするファイルを指定します。アップロードするデータは、ResourceData または SetUploadStream でも設定できます。
UploadFile の FileTitle パラメーターでは、ドライブに書き込まれるファイル名を指定します。
特定のフォルダーにファイルをアップロードするには、ResourceParentId または ResourceParentPath を設定して親フォルダーを示します。両方が指定されている場合には、ResourceParentId が優先されます。どちらも指定されていない場合には、ドライブのルートが仮定されます。
アップロードする前にファイルを暗号化するには、EncryptionAlgorithm および EncryptionPassword を設定します。
UploadFile メソッドは、アップロードされたリソースの ID を返します。

アップロードに関する注意
Microsoft OneDrive では、ファイルをアップロードする方法が 2 つあります。容量の小さいファイルは、1 つのリクエストでデータをアップロードできる、シンプル アップロードのオプションがあり、これがデフォルトとなっています。容量の大きいファイルについては、アップロードが複数のパーツに分けられ、アップロードが中断された場合でも再開できるようになっています。

簡易性
デフォルトでは、コンポーネントはシンプル アップロードのメカニズムを使用します。このメカニズムでは、100 MB までのファイルをアップロードできます。また、SetUploadStream を使用する場合には、シンプル アップロードしか対応していません。

onedrive.LocalFile = "../MyFile.zip";
onedrive.UploadFile("MyFile.zip");

次のプロパティは、UploadFile および UseResumableUpload が False の場合に適用されます (デフォルトのシンプル アップロードの場合)。
LocalFile
ResourceData
ResourceParentId
ResourceParentPath
Overwrite
RenameIfExists

アップロード再開の有効化
アップロードの再開を有効化するには、UseResumableUpload を True に設定します。10 MB 以上の容量の大きいファイルでは、この方法を推奨します。コンポーネントは、指定されたファイルを自動的に分割し、個別にアップロードします。必要に応じて、FragmentSize を設定し、ファイルの分割サイズを指定できます。デフォルトでは、分割サイズは 10 MB となっています。
UseResumableUpload が True に設定され、UploadFile が呼び出されると、再開可能なアップロードのセッションが開始します。ResumeURL には、セッションに対応する URL が読み込まれます。この値は、アップロードが正常に完了しない時に、追加操作のために必要となる場合があります。さらに、必要に応じて StartByte が更新され、ファイルにおける現在のオフセットを示します。
何らかの理由でアップロードが中断された場合には、アップロードを再開できます。再開するには、ResumeURL および StartByte が入力されていることを確認します。コンポーネントの同じインスタンスが使用されている場合、これらはすでに入力済みのため、特別な操作は必要ありません。UploadFile を再度呼び出して、指定の StartByte オフセットでアップロードを再開します。
再開可能なアップロードが何らかの理由で中断された場合、AbortUpload を呼び出してアップロードをキャンセルできます。しばらくしてもアップロードが再開しない場合、アップロード セッションは終了します。UploadExpDate によって、アップロードが終了する時間を確認できます。
再開可能なアップロードのステータスを確認するには、GetUploadStatus を使用します。各フラグメントがアップロードされると、FragmentComplete イベントが発生し、全体の進捗を示します。

onedrive.LocalFile = "../MyFile.zip";
onedrive.UploadFile("MyFile.zip");
 
//The transfer is interrupted and UploadFile() above fails. Later, resume the download.
//Using the same instance StartByte and ResumeURL are already populated
//from the previous upload attempt
onedrive.UploadFile("MyFile.zip");

次のプロパティは、UploadFile および UseResumableUpload が True の場合に適用されます。
LocalFile
ResourceData
ResourceParentId
ResourceParentPath
Overwrite
RenameIfExists
StartByte
ResumeURL

その他の機能

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

EncryptionAlgorithm および EncryptionPassword を使ったファイルの暗号化、および復号
CopyResourceMoveResourceDeleteResourceUpdateResource を使ったファイルおよびフォルダーの管理
CreateLink によるコンテンツへの共有可能なリンクの作成
ListChanges によって特定の時点からのドライブ内における変更を一覧表示し、ローカルとリモート コピーの同期を容易化
Search を使った、一致するコンテンツの検索
ListDrives による複数のドライブへの機能提供
• その他

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