在Java API中复制到目标Google Cloud Bucket时,是否可以提供凭据?

时间:2017-08-23 22:47:22

标签: google-cloud-platform google-cloud-storage

在下面的代码中,我接受了一个输入桶和blob以及一个输出桶和blob。该代码通过setCredentials方法为输入存储桶中的blob建立服务帐户凭据。但是,输出存储区的copyTo方法中没有镜像步骤。

  def copy(inBucketName: String,
           inBlobName: String,
           outBucketName: String,
           outBlobName: String) = {

    val storage = StorageOptions.newBuilder
      .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream("key.json")))
      .build
      .getService
    val blobId = BlobId.of(inBucketName, inBlobName)
    val blob = storage.get(blobId)
    if (blob != null) {
      val copyWriter = blob.copyTo(outBucketName, outBlobName)
      val copiedBlob = copyWriter.getResult()
    }
  }

我担心如果每个存储桶具有不同的服务凭据,这将在将来导致一些身份验证问题。查看blob.copyTo() API,我还可以传递BlobSourceOptoin objectpublic CopyWriter copyTo(String targetBucket, String targetBlob, BlobSourceOption... options)。但是,我没有在BlobSourceOption中看到我可以分配凭据的任何地方。是否需要为目标存储桶分配凭据?如果是这样,有没有一种标准的方法来设置它们?

1 个答案:

答案 0 :(得分:0)

使用以下代码段。凭据是凭证JSON字符串。

val storage = StorageOptions.newBuilder
      .setCredentials(
        ServiceAccountCredentials.fromStream(
          new FileInputStream(credentials)))
      .build
      .getService