我想将多个GCS文件合并为一个大文件。根据文档,有一个compose函数,看起来它完全符合我的需要: https://developers.google.com/storage/docs/json_api/v1/objects/compose
但是,我无法使用Java客户端找到如何从GAE调用该函数: https://developers.google.com/appengine/docs/java/googlecloudstorageclient/
有没有办法用这个库做到这一点?
或者我应该使用频道逐个阅读文件?
或者我应该调用低级JSON方法吗?
最好的方法是什么?
答案 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;
}