CData Google Drive Drivers はGoogle Drive のAPI を通してドライブ上のファイルやフォルダ情報にアクセスできるドライバーです。また、ドライブにあるファイルをダウンロードしたり、ローカルのファイルをアップロードしたりすることができます。例えばファイルをアップロードする際は以下のようにUploadFile ストアドプロシージャを使い、アップロードするローカルファイルのパスを指定して実行します。
EXEC UploadFile @LocalFile = 'C:\test.txt'
UploadFile ストアドプロシージャは送信するファイル、アップロード先のフォルダやファイル名等をパラメータで指定してドライブにアップロードします。ドライバーのバージョン21 では、アップロードするファイルを指定する方法として、①LocalFile パラメータにファイルパスを指定する方法と、②FileContent パラメータにファイルのデータを指定する方法 の2種類がありました。バージョン22 では第3 の方法として、Content パラメータにストリームを指定する方法が追加されました。
Upload ストアドプロシージャでアップロードするファイルの指定方法
パラメータ名 |
説明 |
LocalFile |
アップロードするローカルファイルのパスを指定 |
FileContent |
アップロードするファイルの内容をデータで指定 |
Content |
アップロードするファイルの内容をストリームで指定 (V22 で追加) |
ストリームとはデータを扱う形態の一つで、特徴としてデータを分割しメモリ上にバッファリングさせながら入出力処理を行います。例えばUploadFile ストアドプロシージャで大きなファイルをアップロードするときに、LocalFile パラメータやFileContent パラメータによる方法ではファイル全体を一度にメモリに読み込んで送信していました。バージョン22 ではContent パラメータにファイルのインプットストリームオブジェクトを指定することで、メモリ領域を効率的に活用してファイルを送信することができます。Java などで実装する際には、FileInputStream で読み込んだファイルを一度書き出すことなく、そのままストアドプロシージャのパラメータに指定できます。
ファイルの内容をストリームで指定できる機能は他のドライバーにも実装されています。本機能に対応している主なドライバーとストアドプロシージャを以下に示します。
ドライバー |
ストアドプロシージャ |
パラメータ |
パラメータの説明 |
CData Email Drivers |
SendMailMessages |
AttachmentContent |
送信するメールの添付ファイル |
CData FTP Drivers |
Upload |
Content |
送信するファイル |
CData SFTP Drivers |
Upload |
Content |
送信するファイル |
CData Google Cloud Storage Drivers |
UploadObject |
ContentStream |
送信するファイル |
CData Google Drive Drivers |
UploadFile |
Content |
送信するファイル |
CData Amazon S3 Drivers |
UploadObject |
Content |
送信するファイル |
ストアドプロシージャのパラメータがストリームの入力に対応しているかどうかを調べるにはヘルプをご覧ください。対応しているパラメータは以下のようにAccepts Input Streams 列がTrue となっています。
以下からは本機能の使用方法を説明します。
シナリオ
今回は説明のためにGoogle Drive にファイルをアップロードするシナリオで実装例を示します。本例ではCData Google Drive Drivers のUploadFile ストアドプロシージャで、ローカルにあるファイル「test.txt」 を「test_upload.txt」という名前でGoogle Drive にアップロードします。
LocalFile パラメータを使用した例
従来の方法として、LocalFile パラメータでファイルを指定する例を示します。
CallableStatement cstmt = conn.prepareCall("UploadFile");
cstmt.setString("Name","test_uploaded.txt");
cstmt.setString("LocalFile","C:\\test.txt");
cstmt.execute();
Content パラメータを使用した例
これと同じ処理をContent パラメータを用いて実装した例を示します。
CallableStatement cstmt = conn.prepareCall("UploadFile");
cstmt.setString("Name","test_uploaded.txt");
// InputStreamを生成
InputStream file = new FileInputStream("C:\\test.txt");
cstmt.setBinaryStream("Content",file);
cstmt.execute();
C#での実装例
CData Google Drive ADO.NET Provider を用いてUploadFile ストアドプロシージャを実行する例を示します。
LocalFile パラメータを使用した例
こちらも従来の方法として、LocalFile パラメータでファイルを指定する例を示します。
GoogleDriveCommand cmd = new GoogleDriveCommand("UploadFile", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new GoogleDriveParameter("Name", "test_upload.txt"));
cmd.Parameters.Add(new GoogleDriveParameter("LocalFile", "C:\\test.txt"));
GoogleDriveDataReader rdr = cmd.ExecuteReader();
Content パラメータを使用した例
これと同じ処理をContent パラメータを用いて実装した例を示します。
GoogleDriveCommand cmd = new GoogleDriveCommand("UploadFile", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new GoogleDriveParameter("Name", "test_upload.txt"));
// InputStreamを生成
FileStream file = new FileStream("C:\\test.txt", FileMode.Open, FileAccess.Read);
cmd.Parameters.Add(new GoogleDriveParameter("Content", file));
GoogleDriveDataReader rdr = cmd.ExecuteReader();
おわりに
本記事ではCData Google Drive Drivers のファイルをアップロードするストアドプロシージャ(UploadFile ストアドプロシージャ)で、送信するファイルの内容としてストリームを指定する方法を説明しました。CData Google Drive Drivers は30日間無料でお使いいただけます。Google Drive との連携をご検討の方はぜひお試しください。
関連コンテンツ