将对象上传到Google云端存储

时间:2017-08-06 11:27:22

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

根据@ 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的理解是,用户不需要进行身份验证,因此允许匿名用户上传数据,而无需在存储桶上设置任何特殊权限。我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

'content-type'参数是可选的,但是如果你没有定义它,那么它默认为'binary / octet-stream'。当您尝试上传具有不同内容类型的图像时,会遇到签名不匹配。