如何使用'撰写'在GCS上使用Java客户端

时间:2014-06-12 14:40:27

标签: java google-app-engine google-cloud-storage

我想将多个GCS文件合并为一个大文件。根据文档,有一个compose函数,看起来它完全符合我的需要: https://developers.google.com/storage/docs/json_api/v1/objects/compose

但是,我无法使用Java客户端找到如何从GAE调用该函数: https://developers.google.com/appengine/docs/java/googlecloudstorageclient/

有没有办法用这个库做到这一点?

或者我应该使用频道逐个阅读文件?

或者我应该调用低级JSON方法吗?

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

撰写操作确实完全符合您的要求。但是,GAE Google云端存储客户端目前无法使用撰写操作。你有几个选择。

您可以使用非GAE Google API客户端(链接到Java)。它调用较低级别的JSON API并支持compose()。缺点是这个客户端没有任何特殊的AppEngine魔法,所以一些小东西会有所不同。例如,如果您在本地开发服务器中运行它,它将联系真正的Google云端存储。此外,您还需要对其进行配置以授权其请求等。

另一种选择是直接调用JSON或XML API。

最后,如果您只需要执行此操作,则只需使用命令行实用程序:

gsutil compose gs://bucket/source1 gs://bucket/source2 gs://bucket/output

答案 1 :(得分:1)

新Java客户端中提供了compose选项,我尝试使用google-cloud-storage:1.63.0。

  /** Example of composing two blobs. */
  // [TARGET compose(ComposeRequest)]
  // [VARIABLE "my_unique_bucket"]
  // [VARIABLE "my_blob_name"]
  // [VARIABLE "source_blob_1"]
  // [VARIABLE "source_blob_2"]
  public Blob composeBlobs(
      String bucketName, String blobName, String sourceBlob1, String sourceBlob2) {
    // [START composeBlobs]
    BlobId blobId = BlobId.of(bucketName, blobName);
    BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build();
    ComposeRequest request =
        ComposeRequest.newBuilder()
            .setTarget(blobInfo)
            .addSource(sourceBlob1)
            .addSource(sourceBlob2)
            .build();
    Blob blob = storage.compose(request);
    // [END composeBlobs]
    return blob;
  }