如何通过Java客户端将包含元数据的文件上传到Google Cloud Storage?

时间:2018-07-10 17:28:48

标签: google-cloud-storage

PHP客户端似乎允许这样做:https://github.com/GoogleCloudPlatform/google-cloud-php/issues/626

在Java客户端(1.35.0版)上,我还没有找到一次性上传内容和设置其自定义元数据的方法。

2 个答案:

答案 0 :(得分:1)

有两种写入存储桶的方法:通过存储桶对象和(绕过存储桶)对象通过存储对象。

存储桶API似乎不允许提供元数据(blob仅通过其名称标识为字符串)。

val sto: Storage = StorageOptions.getDefaultInstance.getService()
val bucket: Bucket = sto.get(bucketName)
bucket.create("abc", "ABC!".getBytes(UTF_8))

相反,存储API允许传递自定义元数据:

val sto: Storage = StorageOptions.getDefaultInstance.getService()
val meta: Map[String,String] = Map("a" -> "42", "b" -> "25")

val bId: BlobId = BlobId.of(bucketName, "abc2")
val bInfo: BlobInfo = BlobInfo.newBuilder(bId)
  .setMetadata( meta.asJava )
  .build()

sto.create(bInfo, "ABC!".getBytes(UTF_8))

我希望在文档中的某个地方对此进行更清晰的描述,但是也许StackOverflow中的条目就足够了。 :)

答案 1 :(得分:0)

从1.35.0版开始,这就是它在Java中的工作方式:

    public Blob uploadWithMetadata(Storage storage, Map<String, String> metadata, byte[] objectData) {
        BlobInfo blobInfo = BlobInfo
            .newBuilder("bucketName",  "objectName")
            .setMetadata(metadata)
            .build();
        return storage.create(blobInfo, objectData);
    }

对于客户端版本1.109.1,存储区API仍然不允许设置自定义元数据。