Google cloud storage 在Google Cloud Store中创建对象后添加到用户元数据 我想添加上传流时从流计算的用户元数据

Google cloud storage 在Google Cloud Store中创建对象后添加到用户元数据 我想添加上传流时从流计算的用户元数据,google-cloud-storage,google-app-engine,Google Cloud Storage,Google App Engine,在文件上载过程中,我正在从Servlet内部使用 我能想出并尝试的唯一解决方案并不是真正令人满意的,原因有两个 在内存中缓冲流,在缓冲流时计算元数据,然后在完全读取流后将其写入云存储 将流写入bucket并计算元数据。然后从临时bucket读取对象,并使用计算出的元数据将其写入最终位置 在客户端上预计算元数据并将其与上载一起发送 为什么这些不可接受: 不适用于大型对象,其中一些对象将是 如果上传了大量的对象,将会花费一大笔钱,而这将是一笔巨大的财富 不能信任客户,有些客户无法计算我需要的东

在文件上载过程中,我正在从
Servlet
内部使用

我能想出并尝试的唯一解决方案并不是真正令人满意的,原因有两个

  • 在内存中缓冲流,在缓冲流时计算元数据,然后在完全读取流后将其写入云存储

  • 将流写入bucket并计算元数据。然后从临时bucket读取对象,并使用计算出的元数据将其写入最终位置

  • 在客户端上预计算元数据并将其与上载一起发送

  • 为什么这些不可接受:
  • 不适用于大型对象,其中一些对象将是
  • 如果上传了大量的对象,将会花费一大笔钱,而这将是一笔巨大的财富
  • 不能信任客户,有些客户无法计算我需要的东西
  • 有没有办法在事后更新Google Cloud Store对象的元数据?您可能正在使用该库。这个库非常适合AppEngine用户,但它只提供了Google云存储功能的一部分。据我所知,它并不支持更新现有对象的元数据。然而,谷歌云存储肯定支持这一点

    您可以使用,它公开了Google云存储的JSON API。有了这个库,您将能够使用方法或方法,这两种方法都可以更新元数据(区别在于更新会替换已经存在的对象的任何属性,而补丁只会更改指定的字段)。代码如下所示:

    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();
    
    您可能正在使用该库。这个库非常适合AppEngine用户,但它只提供了Google云存储功能的一部分。据我所知,它并不支持更新现有对象的元数据。然而,谷歌云存储肯定支持这一点

    您可以使用,它公开了Google云存储的JSON API。有了这个库,您将能够使用方法或方法,这两种方法都可以更新元数据(区别在于更新会替换已经存在的对象的任何属性,而补丁只会更改指定的字段)。代码如下所示:

    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();
    
    修补程序是否为选项:修补程序是否为选项: