Google Cloud Storage での読み取りと書き込み

このドキュメントでは、Google Cloud Storage クライアント ライブラリを使用して、App Engine アプリで Cloud Storage におけるデータの保存と取得を行う方法を説明します。先に Google Cloud Storage の設定で説明されているように、Cloud Storage バケットを有効にし、クライアント ライブラリをダウンロードしておく必要があります。また、Java App Engine スタンダード環境のクイックスタートで説明されている、App Engine アプリケーションのビルド方法を理解している必要があります。

必要なインポート

次のスニペットに、クライアント ライブラリ経由で Cloud Storage にアクセスするために必要なインポートを示します。

import com.google.appengine.tools.cloudstorage.GcsFileOptions;
import com.google.appengine.tools.cloudstorage.GcsFilename;
import com.google.appengine.tools.cloudstorage.GcsInputChannel;
import com.google.appengine.tools.cloudstorage.GcsOutputChannel;
import com.google.appengine.tools.cloudstorage.GcsService;
import com.google.appengine.tools.cloudstorage.GcsServiceFactory;
import com.google.appengine.tools.cloudstorage.RetryParams;

Cloud Storage バケットを指定する

次のスニペットに、バケットにファイルを書き込む際、バケット名をユーザーに指定させる方法の 1 つを示します。

function uploadFile() {
  var bucket = document.forms["putFile"]["bucket"].value;
  var filename = document.forms["putFile"]["fileName"].value;
  if (bucket == null || bucket == "" || filename == null || filename == "") {
    alert("Both Bucket and FileName are required");
    return false;
  } else {
    var postData = document.forms["putFile"]["content"].value;
    document.getElementById("content").value = null;

    var request = new XMLHttpRequest();
    request.open("POST", "/gcs/" + bucket + "/" + filename, false);
    request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    request.send(postData);
  }
}

このスニペットは、必要な /gcs/ をユーザーの入力したバケット名とファイル名の先頭に追加します。

Cloud Storage に書き込む

Cloud Storage にファイルを書き込むには:

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  GcsFileOptions instance = GcsFileOptions.getDefaultInstance();
  GcsFilename fileName = getFileName(req);
  GcsOutputChannel outputChannel;
  outputChannel = gcsService.createOrReplace(fileName, instance);
  copy(req.getInputStream(), Channels.newOutputStream(outputChannel));
}

このサンプルは新しいファイルを Cloud Storage に書き込みます。同じ名前のファイルがすでに存在する場合は、それを上書きします。これは、ファイルを Cloud Storage に書き込むとそれを変更できないため便利です。ファイルを変更するには、ファイルのコピーに変更を加えてから、古いファイルを上書きする必要があります。

Cloud Storage から読み取る

Cloud Storage からファイルを読み取るには:

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  GcsFilename fileName = getFileName(req);
  if (SERVE_USING_BLOBSTORE_API) {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    BlobKey blobKey = blobstoreService.createGsBlobKey(
        "/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName());
    blobstoreService.serve(blobKey, resp);
  } else {
    GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE);
    copy(Channels.newInputStream(readChannel), resp.getOutputStream());
  }
}

gcsService.openPrefetchingReadChannel を含む行で、プリフェッチが使用されていることに注意します。これは、データをメモリにバッファし、必要になる前にプリフェッチして、読み取り呼び出しに対するブロックを回避します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境