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

/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を使った例

 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;

リソースの一覧表示

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 は空の文字列を返します。

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);
}

ファイルのダウンロード

特定のファイルをダウンロードするには、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
PDF 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
PDF application/pdf
CSV (1 シートのみ) text/csv
Google Drawing JPEG image/jpeg
PNG image/png
SVG image/svg+xml
PDF image/pdf
Google Slides MS Powerpoint application/vnd.openxmlformats-officedocument.presentationml.presentation
PDF application/pdf
Plain text text/plain
Google App Scripts JSON application/vnd.google-apps.script+json

暗号化されたファイルを復号するには、このメソッドを呼び出す前に、EncryptionAlgorithm と EncryptionPassword を設定します。

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

ダウンロードの再開

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

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("");

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

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

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("");

ファイルのアップロード

新しいファイルをアップロードするには、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 を使用する場合には、シンプル アップロードしか対応していません。

googledrive.LocalFile = "../MyFile.zip";
googledrive.UploadFile("MyFile.zip", "");

アップロード再開の有効化

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

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", "");

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

その他の機能

Google Drive コンポーネントは、簡単なアップロードやダウンロードの他にも、以下のような高度な機能を提供しています。
EncryptionAlgorithmEncryptionPassword を使ったファイルの暗号化、および復号
CopyResourceMoveToTrashRestoreFromTrashDeleteResourceUpdateResource を使ったファイルおよびフォルダーの管理
ListChanges によって特定の時点からのドライブ内における変更を一覧表示し、ローカルとリモート コピーの同期を容易化
ListPersmissionsUpdatePermissions によるファイルやフォルダーの一覧表示およびアクセス許可の更新
• その他

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