根据@ brandon-yarbrough在此SO question中提供的答案,我选择使用签名网址将对象上传到云端存储。我通过google-cloud-storage
库生成签名的URL,如下所示:
private static Storage storage = StorageOptions.getDefaultInstance().getService();
URL uploadUrl = storage.signUrl(
BlobInfo.newBuilder(IMAGE_BUCKET, fileName).build(),
30,
TimeUnit.MINUTES,
Storage.SignUrlOption.httpMethod(HttpMethod.PUT));
当我尝试将文件上传到生成的网址时,我收到以下错误消息。
<?xml version='1.0' encoding='UTF-8'?>
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>Anonymous users does not have storage.objects.create access to bucket the-awesomest-bucket.</Details>
</Error>
我对签名URL的理解是,用户不需要进行身份验证,因此允许匿名用户上传数据,而无需在存储桶上设置任何特殊权限。我错过了什么吗?
答案 0 :(得分:0)
'content-type'参数是可选的,但是如果你没有定义它,那么它默认为'binary / octet-stream'。当您尝试上传具有不同内容类型的图像时,会遇到签名不匹配。