我将图片存储在google-cloud-storage的存储桶中的目录中。这些图像不能公开查看。据我所知,我可以对图片进行“签名”,生成的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在指定的时间内对公众用户可用。我想将它用作image标记中的src值。
相反,我得到的是:
<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Details>
obfuscated to protect the innocent
</Details>
</Error>发布于 2019-05-31 22:00:38
默认情况下,对象的url为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.jpghttps://stackoverflow.com/questions/56384815
复制相似问题