/n software の Cloud Storage Integrator は、Amazon S3 や Google Drive、Dropbox、Box.com、OneDrive などのクラウド ストレージ サービスにアクセスできる、使い勝手のよいコンポーネントを提供します。
このツールキットは、個々のサービスごとのコンポーネントと、複数のサービスにアクセスできる、統一された API を備えた CloudStorage
コンポーネントから成っています。
Cloud Storage Integrator ではまた、クラウドに保存されるデータを保護するため、強力な暗号化サポートも提供しています。
今回は、Google Drive コンポーネントの使用方法について説明します。
Google Drive
GoogleDrive コンポーネントは、Google Drive を操作するための簡単なインターフェイスを提供します。ファイルのアップロードおよびダウンロード、強力な暗号化サポート、フォルダーの作成、リソースの移動およびコピーなどの機能が含まれます。
まず、アカウントを開設して、アプリケーションを Google Drive に登録します。このプロセスについては、Google Drive のドキュメントを参照してください。
認証
認証は、OAuth 2.0 経由で行われます。ツールキットに含まれる OAuth コンポーネントか、その他の OAuth 実装を使用して認証を実行し、認証文字列を取得します。以下のような認証文字列を取得したら、操作を実行する前に、この値を [Authorization] プロパティに割り当てます。
Bearer ya29.AHES6ZSZEJzATdZYjeihDn5W-VrXSsxEZu5p0pclxGdKKQ
サポートされるスコープ値および OAuth 認証に関する詳細は、この特定のサービスに関するGoogle Driveのドキュメントを参照してください。
OAuthを使った例
[csharp light=”true”] oauth.ClientProfile = OauthClientProfiles.cfApplication;
oauth.ClientId = OAUTH_CLIENT_ID;
oauth.ClientSecret = OAUTH_SECRET_ID;
oauth.RefreshToken = refreshToken;
oauth1.AuthorizationScope = "https://www.googleapis.com/auth/drive";
oauth.ServerAuthURL = "https://accounts.google.com/o/oauth2/auth";
oauth.ServerTokenURL = "https://accounts.google.com/o/oauth2/token";
oauth.Config("WebServerPort=7777"); // http://localhost:7777 is a registered redirect_uri for the app
string authString = oauth.GetAuthorization();
googledrive.Authorization = authString;[/csharp]
リソースの一覧表示
ListResources
は、現行のユーザーのファイルおよびフォルダーをすべて一覧表示します。
このメソッドを呼び出した後、 ResourceIndex
の値を 0 から ResourceCount
– 1 に設定します。 ResourceIndex
を設定すると、その他の Resource プロパティが設定され、リソースに関する情報が提供されます。上記の呼び出しにより、次のリソース プロパティが読み込まれます。
• ResourceContentAccessible
• ResourceCount
• ResourceCreatedTime
• ResourceDescription
• ResourseExtension
• ResourceId
• ResourceIndex
• ResourceMarker
• ResourceMD5Checksum
• ResourceMIMEType
• ResourceModifiedTime
• ResourceName
• ResourceOriginalName
• ResourceOwners
• ResourceParents
• ResourceSize
• ResourceStarred
• ResourceTrashed
• ResourceType
• ResourceViewed
結果がページ分割されている場合、ResourceMarker
プロパティが読み込まれます。 ListResources
を再度呼び出すことにより、結果の次のページが取得できます。 ListResources
の呼び出しにより、すべてのページを取得すると、ResourceMarker
は空の文字列を返します。
[csharp light=”true”]googledrive.ListResources();
for (int i = 0; i < googledrive.ResourceCount; i++)
{
googledrive.ResourceIndex = i;
Console.WriteLine(googledrive.ResourceName);
Console.WriteLine(googledrive.ResourceSize);
Console.WriteLine(googledrive.ResourceModifiedTime);
}[/csharp]
ファイルのダウンロード
特定のファイルをダウンロードするには、DownloadFile
メソッドを使用します。
このメソッドを使うと、ResourceIndex
で選択したファイルをダウンロードします。ファイルは、SetDownloadStream
で指定されたストリームにダウンロードされます。ストリームが指定されていない場合には、LocalFile
で指定された場所に保存されます。ストリームと LocalFile
のどちらも指定されていない場合には、データは ResourceData
に保留されます。
MimeType パラメーターでは、ファイルを保存する場合の “text/plain” などのフォーマットを指定します。既定のフォーマットを使用するには、このパラメーターに空の文字列を指定します。Google 形式のファイルは、以下の MIME の種類を使用して変換できます。
Google 形式 | ダウンロードできるフォーマット | MIME の種類 |
Google Docs | HTML | text/html |
Plain text | text/plain | |
Rich text | application/rtf | |
Open Office document | application/vnd.oasis.opendocument.text | |
application/pdf | ||
MS Word | application/vnd.openxmlformats-officedocument.wordprocessingml.document | |
Google Sheets | MS Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Open Office sheet | application/x-vnd.oasis.opendocument.spreadsheet | |
application/pdf | ||
CSV (1 シートのみ) | text/csv | |
Google Drawing | JPEG | image/jpeg |
PNG | image/png | |
SVG | image/svg+xml | |
image/pdf | ||
Google Slides | MS Powerpoint | application/vnd.openxmlformats-officedocument.presentationml.presentation |
application/pdf | ||
Plain text | text/plain | |
Google App Scripts | JSON | application/vnd.google-apps.script+json |
暗号化されたファイルを復号するには、このメソッドを呼び出す前に、EncryptionAlgorithm
と EncryptionPassword
を設定します。
[csharp light=”true”]googledrive.ResourceId = fileId;
googledrive.LocalFile = "../MyFile.zip";
googledrive.DownloadFile("");[/csharp]
ダウンロードの再開
このコンポーネントは、StartByte
プロパティを使うことにより、失敗したダウンロードの再開もサポートしています。ダウンロードが中断した場合は、StartByte
を適切なオフセットに設定し、このメソッドを呼び出してダウンロードを再開します。
[csharp light=”true”]googledrive.ResourceIndex = 0;
googledrive.LocalFile = downloadFile;
googledrive.DownloadFile("");
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download file
googledrive.StartByte = new FileInfo(downloadFile).Length;
googledrive.LocalFile = downloadFile;
googledrive.DownloadFile("");[/csharp]
暗号化されたファイルのダウンロードの再開
暗号化されたファイルのダウンロードの再開は、初回のダウンロード時に LocalFile
を設定していた場合のみ可能となります。暗号化されたファイルをダウンロードする時に LocalFile
が設定されていれば、TempPath
に一時ファイルが作成され、暗号化されたデータはダウンロードが完了するまでそこに保持されます。
ダウンロードが中断された場合、DownloadTempFile
には部分データを保持する一時ファイルが読み込まれます。ダウンロードを再開する場合、暗号化された残りのデータをダウンロードするために、DownloadTempFile
および StartByte
の入力が必要となります。暗号化されたデータがダウンロードされると、復号後に LocalFile
に書き込まれます。
[csharp light=”true”]googledrive.ResourceIndex = 0;
googledrive.LocalFile = downloadFile;
googledrive.EncryptionPassword = "password";
googledrive.DownloadFile("");
//The transfer is interrupted and DownloadFile() above fails. Later, resume the download:
//Get the size of the partially download temp file
googledrive.StartByte = new FileInfo(googledrive.Config("DownloadTempFile")).Length;
googledrive.LocalFile = downloadFile;
googledrive.EncryptionPassword = "password";
googledrive.DownloadFile("");[/csharp]
ファイルのアップロード
新しいファイルをアップロードするには、UploadFile
メソッドを使用します。
SetUploadStream
を呼び出すと、指定のストリームがファイルのデータ ソースとして優先されます。LocalFile
が設定されている場合、ファイルは指定のパスよりアップロードされます。LocalFile
が設定されていない場合、ResourceData
のデータが使用されます。
FileName パラメーターで指定されるファイル名には、ファイルの拡張子が必要です。MimeType
が”” の場合、ファイルはそのままアップロードされます。MimeType
を以下のいずれかに設定することにより、ファイルを Google のフォーマットに変換できます。
元のファイルのフォーマット | Google のフォーマット | MIME の種類 |
MS Word、OpenDocument Text、 HTML、RTF、Plain Text | Google Docs | application/vnd.google-apps.document |
MS Excel、OpenDocument Spreadsheet、CSV、TSV、Plain Text | Google Sheets | application/vnd.google-apps.spreadsheet |
MS Powerpoint、OpenDocument Presentation | Google Slides | application/vnd.google-apps.presentation |
PDF、JPEG、PNG、GIF、BMP (画像がドキュメントに埋め込まれている場合) | Google Docs | application/vnd.google-apps.document |
Plain Text、JSON | Google Apps Script | application/vnd.google-apps.script |
このメソッドを呼び出す前に、ResourceIndex
を -1 に設定して既存の選択を解除します。また、以下のプロパティも設定できます。
• ResourceContentAccessible
• ResourceDescription
• ResourceStarred
• ResourceTrashed
• ResourceViewed
• ResourceModifiedTime
• ResourceParents
このメソッドは、新規に作成されたファイルの Id を返します。ファイルをアップロードする前に暗号化するには、EncryptionAlgorithm
および EncryptionPassword
を設定します。
簡易性
デフォルトでは、コンポーネントはシンプル アップロードのメカニズムを使用します。SetUploadStream
を使用する場合には、シンプル アップロードしか対応していません。
[csharp light=”true”]googledrive.LocalFile = "../MyFile.zip";
googledrive.UploadFile("MyFile.zip", "");[/csharp]
アップロード再開の有効化
アップロードの再開を有効化するには、UseResumableUpload
を True に設定します。容量の大きいファイルでは、この方法を推奨します。コンポーネントは、指定されたファイルを自動的に分割し、個別にアップロードします。必要に応じて、FragmentSize
を設定し、ファイルの分割サイズを指定できます。デフォルトでは、分割サイズは 10 MB となっています。
UseResumableUpload
がTrue に設定され、UploadFile
が呼び出されると、再開可能なアップロードのセッションが開始します。ResumeURL
には、セッションに対応する URL が読み込まれます。この値は、アップロードが正常に完了しない時に、追加操作のために必要となる場合があります。さらに、必要に応じて StartByte
が更新され、ファイルにおける現在のオフセットを示します。
何らかの理由でアップロードが中断された場合、アップロードを再開できます。再開するには、ResumeURL
および StartByte
が入力されていることを確認します。コンポーネントの同じインスタンスが使用されている場合、これらはすでに入力済みのため、特別な操作は必要ありません。UploadFile
を再度呼び出して、指定の StartByte
オフセットでアップロードを再開します。
しばらくしてもアップロードが再開しない場合、アップロード セッションは終了します。
再開可能なアップロードのステータスを確認するには、GetUploadStatus
を使用します。各フラグメントがアップロードされると FragmentComplete
イベントが発生し、全体の進捗を示します。
[csharp light=”true”]googledrive.LocalFile = "../MyFile.zip";
googledrive.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
googledrive.UploadFile("MyFile.zip", "");[/csharp]
次のプロパティは、UploadFile
および UseResumableUpload
が True の場合に適用されます。
• StartByte
• ResumeURL
その他の機能
Google Drive コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
• EncryptionAlgorithm
や EncryptionPassword
を使ったファイルの暗号化、および復号
• CopyResource
、MoveToTrash
、RestoreFromTrash
、DeleteResource
、 UpdateResource
を使ったファイルおよびフォルダーの管理
• ListChanges
によって特定の時点からのドライブ内における変更を一覧表示し、ローカルとリモート コピーの同期を容易化
• ListPersmissions
や UpdatePermissions
によるファイルやフォルダーの一覧表示およびアクセス許可の更新
• その他
/n software 製品の詳細は、こちら をご覧ください。