CData Google Drive Drivers でアップロードするファイルの内容をストリームで指定する方法

by 浦邊信太郎 | 2022年09月02日

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 にアップロードします。

以下からはJava とC# でファイルをアップロードする処理の実装例をそれぞれ紹介します。

Javaでの実装例

CData Google Drive JDBC Driver を用いてUploadFile ストアドプロシージャを実行する例を示します。

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 との連携をご検討の方はぜひお試しください。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。