/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 製品の詳細は、こちら をご覧ください。