はじめに
/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
前回の Box.com コンポーネントに続き、今回は FTP のように簡単なインターフェイスで Box、Dropbox、GoogleDrive、OneDrive および SharePoint Online へファイルをアップロード/ダウンロードできるストレージ サービス、CloudStorage 専用コンポーネント の使用方法について説明します。
CloudStorage
CloudStorage コンポーネントは、あらゆるサービスを扱う単一のインターフェイスを提供します。単一の API で複数のプロバイダーをサポートすることにより、コードを一度書くだけで、複数のサービスをサポートします。現在このコンポーネントでは、以下のプロバイダーをサポートします。
- Amazon S3
- Azure Blob
- Box.com
- DropBox
- Google Drive
- Microsoft OneDrive
- SharePoint Online
このコンポーネントでは、簡単なファイルとフォルダの管理および暗号化をサポートします。ファイルのアップロードおよびダウンロード、強力な暗号化のサポート、フォルダの作成、そしてその他多くの機能を備えています。
まず、アカウントを開設して、アプリケーションの登録を行います。このプロセスについては、個々のサービス プロバイダーのドキュメントを参照してください。
認証
以下のプロバイダーは、OAuth 2.0 を使用して認証を行います。
- Box
- DropBox
- Google Drive
- Microsoft OneDrive
toolkit に含まれる OAuth コンポーネント、またはその他の OAuth 実装を使用して認証を行い、認証文字列を取得します。まず、以下のような認証文字列を取得します。
[csharp light=”true”]Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ[/csharp]
操作を施行する前に、認証プロパティにこの値を割り当てます。サポートされるスコープ値および OAuth 認証の詳細に関するこの特定のサービスについては、Box.com のドキュメントを参照してください。
Amazon S3 で認証を行う場合、Account.AmazonS3AccessKey および Account.AmazonS3SecretKey を設定します。SharePoint Online で認証を行う場合、Account.SharePointURL、Account.SharePointUser、および Account.SharePointPassword を設定します。Microsoft Azure Blob サービスで認証を行う場合、Account.AzureBlobAccount および Account.AzureBlobAccessKey を設定します。
プロバイダーの選択
プロバイダーの特定には、ServiceProvider を設定します。これにより、実行されるサービス要求がコンポーネントに指示されます。
ファイルおよびフォルダのリスティング
ListDirectory は、RemotePath によってパスが指定されたファイルおよびフォルダをリストします。ファイルマスクは、RemoteFile 内でオプションとして提供されることがあります。
ディレクトリ エントリは、DirList イベントまたは DirList プロパティを通して提供されます。
[csharp light=”true”]cloudstorage.RemotePath = "MyFolder";
cloudstorage.ListDirectory();
for (int i = 0; i < cloudstorage.DirList.Count; i++)
{
Console.WriteLine(cloudstorage.DirList[i].FileName);
Console.WriteLine(cloudstorage.DirList[i].FileSize);
Console.WriteLine(cloudstorage.DirList[i].FileTime);
Console.WriteLine(cloudstorage.DirList[i].IsDir);
}[/csharp]
オプションで、ファイルマスクに RemoteFile を設定して、特定のファイルのみをリストすることができます。
[csharp light=”true”]cloudstorage.RemoteFile = "*.txt";
cloudstorage.ListDirectory();[/csharp]
ファイルのダウンロード
Download メソッドで、特定のファイルをダウンロードできます。
このメソッドを呼び出す前に、ダウンロードするファイルの名前に RemoteFile を設定します。RemoteFile がファイルネームの指定のみを行う場合、RemotePath で指定されたパスからダウンロードされます。RemoteFile は、絶対パスに設定することもできます。
ファイルは、SetDownloadStream によって指定されたストリーム (存在する場合) にダウンロードされます。ストリームが指定されておらず、LocalFile が設定されている場合、ファイルは特定のロケーションに保存されます。ストリームが指定されておらず、LocalFile の設定もされていない場合、ファイル データは ResourceData で保持されます。
暗号化されたファイルを復号する場合、このメソッドの呼び出し前に EncryptionAlgorithm および EncryptionPassword を設定します。
[csharp light=”true”]
cloudstorage.RemotePath = "My Folder";
cloudstorage.RemoteFile = "MyFile.zip";
cloudstorage.LocalFile = "../MyFile.zip";
cloudstorage.Download();[/csharp]
ダウンロードの再開
このコンポーネントは、StartByte プロパティを使用して、失敗したダウンロードの再開もサポートします。ダウンロードが中断した場合、ダウンロードを再開するためにこのメソッドを呼び出す前に、適切なオフセットに StartByte を設定します。
[csharp light=”true”]cloudstorage.RemotePath = myRemoteFolder;
cloudstorage.RemoteFile = myRemoteFile;
cloudstorage.LocalFile = downloadFile;
cloudstorage.Download();
//The transfer is interrupted and Download() above fails. Later, resume the download:
//Get the size of the partially download file
cloudstorage.StartByte = new FileInfo(downloadFile).Length;
cloudstorage.RemotePath = myRemoteFolder;
cloudstorage.RemoteFile = myRemoteFile;
cloudstorage.LocalFile = downloadFile;
cloudstorage.Download();[/csharp]
暗号化されたファイルのダウンロードの再開
暗号化されたファイルのダウンロードの再開は、最初のダウンロードの施行時に LocalFile が設定されていた場合に限りサポートされます。LocalFile が設定された状態で暗号化されたファイルのダウンロードを始める場合、コンポーネントは、ダウンロードが完了するまでの間暗号化されたデータを保持するため、TempPath 内にテンポラリ ファイルを作成します。
ダウンロードが中断された場合、部分的データを保持するテンポラリ ファイルで DownloadTempFile を集約します。再開の際、StartByte とともに DownloadTempFile を集約し、暗号化されたデータのダウンロードのリマインダーを許可します。暗号化されたデータがダウンロードされると、データは復号され、LocalFile に書き込まれます。
[csharp light=”true”]cloudstorage.RemotePath = myRemoteFolder;
cloudstorage.RemoteFile = myRemoteFile;
cloudstorage.LocalFile = downloadFile;
cloudstorage.EncryptionPassword = "password";
cloudstorage.Download();
//The transfer is interrupted and Download() above fails. Later, resume the download:
//Get the size of the partially download temp file
cloudstorage.StartByte = new FileInfo(cloudstorage.Config("DownloadTempFile")).Length;
cloudstorage.RemotePath = myRemoteFolder;
cloudstorage.RemoteFile = myRemoteFile;
cloudstorage.LocalFile = downloadFile;
cloudstorage.EncryptionPassword = "password";
cloudstorage.Download();[/csharp]
ファイルのアップロード
Upload メソッドは、ファイルのアップロードに使用されます。SetUploadStream を使用してアップロード ストリームを設定する場合、アップロードするデータは、代わりにストリームから取得されます。
RemoteFile は、相対または絶対パスのどちらかに設定する必要があります。RemoteFile が絶対パスではない場合、RemotePath にアップロードされます。
アップロードする前にファイルを暗号化する場合、EncryptionAlgorithm および EncryptionPassword を設定します。
注意: 現在、アップロードの再開はサポートしていません。
コードの例
[csharp light=”true”]//Upload with a relative path
cloudstorage.LocalFile = "C:\localfile.txt"
cloudstorage.RemoteFile = "remotefile.txt"
cloudstorage.Upload()
//Upload with an absolute path
cloudstorage.LocalFile = "C:\localfile2.txt"
cloudstorage.RemoteFile = "/folder/remotefile2.txt"
cloudstorage.Upload()[/csharp]
その他の機能
CloudStorage コンポーネントは、単純なアップロードとダウンロードだけではなく、高度な機能を提供します。
EncryptionAlgorithmおよびEncryptionPasswordを使用した暗号化/復号DeleteFileによるファイル削除の提供MakeDirectoryおよびRemoveDirectoryによるフォルダ作成/削除のサポートRenameFileによるサーバー上の既存ファイル名の変更- その他
/n software 製品の詳細は、こちらをご覧ください。


