如何获取存储在google-cloud-storage桶的子目录中的图像的URL

时间:2019-05-30 19:55:07

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

我将图像存储在google-cloud-storage的存储桶中的目录中。 图片无法公开查看。 据我了解,我可以对图片进行“签名”,并且在指定的时间内可以公开查看生成的URL。 到目前为止,我尝试过的所有方法似乎都没有效果。 尝试访问URL会导致NoSuchKey错误。

这是我尝试过的代码的示例。我传递给BlobInfo.newBuilder的第二个参数到底是什么?文档说应该是object name。那仅仅是文件名,即myimage.jpg吗?

URL getSignedImageUrl(String uri) {
  // ImageUploadDetails contains metadata about the image
  ImageUploadDetails imageUploadDetails = ImageUploadDetails.findByUri(uri)
  if (imageUploadDetails) {
    BlobInfo blobInfo = BlobInfo.newBuilder(BlobId.of(bucket, imageUploadDetails.thumbnailPath)).build()
    URL url = storage.signUrl(blobInfo, 60, TimeUnit.MINUTES, Storage.SignUrlOption.withV4Signature())
    return url // this URL, when converted to a String, doesn't work
} else {
  throw new ImageNotFoundException("Cannot open file: ${imageUploadDetails.thumbnailPath}")}
}

我希望已签名的URL在指定的时间内可供公共用户使用。我想将其用作src标记内的image值。

相反,我得到的是:

<Error>
  <Code>NoSuchKey</Code>
  <Message>The specified key does not exist.</Message>
  <Details>
  obfuscated to protect the innocent
  </Details>
</Error>

1 个答案:

答案 0 :(得分:0)

默认情况下,对象的网址为https://storage.googleapis.com/${bucket.name}/${blob.name}

例如:

- bucket1
  - folder1
    - image1.jpg  https://storage.googleapis.com/bucket1/folder1/image1.jpg
    - image2.jpg  https://storage.googleapis.com/bucket1/folder1/image2.jpg
- bucket2
  - image3.jpg    https://storage.googleapis.com/bucket2/image3.jpg