我在文件上传期间使用Servlet
内的Google Cloud Storage Client。
我可以提出和尝试的唯一解决办法由于几个原因而不能令人满意。
在内存中缓冲流,在缓冲流时计算元数据,然后在完全读取后将流写入Cloud Store。
将流写入存储桶并计算元数据。然后从临时存储桶中读取对象,并使用计算出的元数据将其写入最终位置。
预先计算客户端上的元数据并通过上传发送。
答案 0 :(得分:5)
您可能正在使用Google Cloud Storage Java Client for AppEngine库。此库非常适合AppEngine用户,但它仅提供Google云端存储功能的一部分。据我所知,不支持更新现有对象的元数据。但是,Google云端存储肯定支持此功能。
您可以使用展示Google云端存储的JSON API的Google API Java client library。使用此库,您将能够使用storage.objects.update方法或storage.objects.patch方法,这两种方法都可以更新元数据(不同之处在于更新替换了已经存在的对象的任何属性在那里,虽然补丁只是更改指定的字段)。代码看起来像这样:
StorageObject objectMetadata = new StorageObject();
.setName("OBJECT_NAME")
.setMetadata(ImmutableMap.of("key1", "value1", "key2", "value2"));
Storage.Objects.Patch patchObject = storage.objects().patch("mybucket", objectMetadata);
patchObject.execute();