/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を使った例
[csharp light=”true”] 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;[/csharp]
リソースの一覧表示
ListResources は、指定したパスのドライブ内のリソースを一覧表示します。
ResourceParentId または ResourceParentPath を指定しないでこのメソッドを呼び出した場合には、ドライブのルートにあるすべてのリソースを一覧表示します。特定のフォルダーのリソースを表示するには、このメソッドを呼び出す前に ResourceParentId か ResourceParentPath のいずれかを設定します。ResourceParentId を設定すると、ResourceParentPath よりも優先されます。
ResourceParentId か ResourceParentPath のいずれかが設定されていると、指定された親フォルダーの子が一覧表示されます。このメソッドを呼び出す前にこれらの 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 は空の文字列を返します。
[csharp light=”true”]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);
}[/csharp]
ファイルのダウンロード
特定のファイルをダウンロードするには、 DownloadFile メソッドを使用します。
ダウンロードするファイルを指定するには、次のいずれかのプロパティを設定します。
• ResourceId
• ResourcePath
• ResourceDownloadURL
ファイルは、SetDownloadStream で指定されたストリームにダウンロードされます。ストリームが指定されていない場合には、LocalFile で指定された場所に保存されます。ストリームと LocalFile のどちらも指定されていない場合には、データは ResourceData に保留されます。
暗号化されたファイルを復号するには、このメソッドを呼び出す前にEncryptionAlgorithm と EncryptionPassword を設定します。
[csharp light=”true”]onedrive.ResourceId = fileId;
onedrive.LocalFile = "../MyFile.zip";
onedrive.DownloadFile();[/csharp]
ダウンロードの再開
このコンポーネントは、StartByte プロパティを使うことにより、失敗したダウンロードの再開もサポートしています。ダウンロードが中断した場合は、StartByte を適切なオフセットに設定し、このメソッドを呼び出してダウンロードを再開します。
[csharp light=”true”]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();[/csharp]
暗号化されたファイルのダウンロードの再開
暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に LocalFile が設定されていれば、TempPath に一時ファイルが作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。
ダウンロードが中断された場合、DownloadTempFile には部分データを保持する一時ファイルが読み込まれます。ダウンロードを再開する場合、暗号化された残りのデータをダウンロードするために、DownloadTempFile および StartByte の入力が必要となります。暗号化されたデータがダウンロードされると、復号後に LocalFile に書き込まれます。
[csharp light=”true”]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();[/csharp]
ファイルのアップロード
LocalFile を使ってアップロードするファイルを指定します。アップロードするデータは、ResourceData または SetUploadStream でも設定できます。
UploadFile の FileTitle パラメーターでは、ドライブに書き込まれるファイル名を指定します。
特定のフォルダーにファイルをアップロードするには、ResourceParentId または ResourceParentPath を設定して親フォルダーを示します。両方が指定されている場合には、ResourceParentId が優先されます。どちらも指定されていない場合には、ドライブのルートが仮定されます。
アップロードする前にファイルを暗号化するには、EncryptionAlgorithm および EncryptionPassword を設定します。
UploadFile メソッドは、アップロードされたリソースの ID を返します。
アップロードに関する注意
Microsoft OneDrive では、ファイルをアップロードする方法が 2 つあります。容量の小さいファイルは、1 つのリクエストでデータをアップロードできる、シンプル アップロードのオプションがあり、これがデフォルトとなっています。容量の大きいファイルについては、アップロードが複数のパーツに分けられ、アップロードが中断された場合でも再開できるようになっています。
簡易性
デフォルトでは、コンポーネントはシンプル アップロードのメカニズムを使用します。このメカニズムでは、100 MB までのファイルをアップロードできます。また、SetUploadStream を使用する場合には、シンプル アップロードしか対応していません。
[csharp light=”true”]onedrive.LocalFile = "../MyFile.zip";
onedrive.UploadFile("MyFile.zip");[/csharp]
次のプロパティは、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 イベントが発生し、全体の進捗を示します。
[csharp light=”true”]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");[/csharp]
次のプロパティは、UploadFile および UseResumableUpload が True の場合に適用されます。
• LocalFile
• ResourceData
• ResourceParentId
• ResourceParentPath
• Overwrite
• RenameIfExists
• StartByte
• ResumeURL
その他の機能
OneDrive コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
• EncryptionAlgorithm および EncryptionPassword を使ったファイルの暗号化、および復号
• CopyResource、MoveResource、DeleteResource、UpdateResource を使ったファイルおよびフォルダーの管理
• CreateLink によるコンテンツへの共有可能なリンクの作成
• ListChanges によって特定の時点からのドライブ内における変更を一覧表示し、ローカルとリモート コピーの同期を容易化
• Search を使った、一致するコンテンツの検索
• ListDrives による複数のドライブへの機能提供
• その他
/n software 製品の詳細は、こちら をご覧ください。


