在Google Cloud Store中创建对象后添加用户元数据

时间:2014-09-13 22:08:01

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

我想添加在上传时从流计算的用户元数据

我在文件上传期间使用Servlet内的Google Cloud Storage Client

我可以提出和尝试的唯一解决办法由于几个原因而不能令人满意。

  1. 在内存中缓冲流,在缓冲流时计算元数据,然后在完全读取后将流写入Cloud Store。

  2. 将流写入存储桶并计算元数据。然后从临时存储桶中读取对象,并使用计算出的元数据将其写入最终位置。

  3. 预先计算客户端上的元数据并通过上传发送。

  4. 为什么这些是不可接受的:

    1. 不适用于大型物体,其中一部分将是。
    2. 如果上传了大量的物品,将会花费很多钱。
    3. 不能信任客户,有些客户无法计算我需要的一些东西。
    4. 有没有办法在事后更新Google Cloud Store对象的元数据?

1 个答案:

答案 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();