我将图像存储在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>
答案 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