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

1 google-app-engine google-cloud-storage

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

我在文件上传期间从内部使用Google云端存储客户端Servlet.

由于几个原因,我能提出并尝试的唯一解决办法并不令人满意.

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

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

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

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

  1. 不适用于大型物体,其中一些将是.
  2. 如果上传了大量的物品,那将花费很多钱.
  3. 无法信任客户,有些客户无法计算我需要的一些东西.

事后是否有办法更新Google Cloud Store对象的元数据?

Bra*_*ugh 5

您可能正在使用适用于AppEngine库的Google Cloud Storage Java客户端.此库非常适合AppEngine用户,但它仅提供Google云端存储功能的一部分.据我所知,不支持更新现有对象的元数据.但是,Google云端存储肯定支持这一点.

您可以使用Google API Java客户端库,该公开了Google云端存储的JSON API.使用此库,您将能够使用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();
Run Code Online (Sandbox Code Playgroud)