繁体   English   中英

使用JSON API将文件上传到Google云端存储,错误401未经授权

[英]Uploading files to Google Cloud Storage using JSON API, Error 401 Unauthorized

我试图弄清楚如何在Android中使用JSON API将图像上传到Google Cloud Storage但这样做的文档似乎非常有限。

我相信的问题是获得正确的API密钥身份验证。 上传的图像是公开的图像,但只对我的应用程序的用户公开,因此阅读授权请求文档说我不需要为公共数据提供OAuth密钥,我只需发送一个API密钥

公共API访问:不提供OAuth 2.0令牌的请求必须发送API密钥。 密钥标识您的项目并提供API访问权限,配额和报告。

所以我去我的控制台从我的调试和生产密钥库的SHA1创建了一个密钥(API Manager/Credentials/Create Credentials/API Key)

这些API密钥是正确的,因为它们与谷google sign-in等其他谷歌服务一起使用,它们工作正常。

当我尝试提出启动可恢复上传的请求时,这就是我所做的

String sUrl = "https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=resumable&name="+mImgName;
URL url = new URL(sUrl);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setRequestProperty("Authorization","AIzaSyDT....");
urlConnection.setRequestProperty("X-Upload-Content-Type","image/png");
urlConnection.setRequestProperty("X-Upload-Content-Length",String.valueOf(fileSize));
urlConnection.setRequestMethod("POST");

但我得到Error 401 Unauthorized所以我假设它是我发送的密钥的问题。

我还在Authorize Requests文档的末尾看到它声明我可以将我的密钥作为请求URL的参数

拥有API密钥后,您的应用程序可以将查询参数key = yourAPIKey附加到所有请求URL。

所以我不知道我是否想要这样做或者在请求中设置了Authorization属性,还是两者都设置了?

关键是我创建了错误类型的密钥,或者我在这里缺少什么?

您可以使用API​​密钥下载公共对象。

但是除非您的存储桶启用了公共写入(通常您不想这样做),否则您仍需要使用身份验证来上传到存储桶。

在您的情况下,我认为您可能想要使用签名URL

在查看@jterrace建议的签名URL时,我发现由于我需要一个可恢复的URL,我可以在没有客户端身份验证的情况下使用它

如果您的用户仅将资源(写入)上传到访问控制的存储桶,则可以使用Google云端存储的可恢复上传功能,并避免签名网址或要求使用Google帐户。 在可恢复的上传方案中,您的(服务器端)代码会对Google Cloud Storage进行身份验证并启动上传,而无需实际上传任何数据。 启动请求返回会话URI,然后可以在客户端请求中使用该URI来上载数据。 客户端请求不需要签名,因为会话URI实际上充当身份验证令牌。

所以我做的是让我的App Engine后端创建可恢复的URL,然后将其传递给我的客户端,我在后端获取auth令牌

List<String> scopes = new ArrayList<>();
scopes.add("https://www.googleapis.com/auth/devstorage.full_control");
AppIdentityService appIdentity = AppIdentityServiceFactory.getAppIdentityService();
AppIdentityService.GetAccessTokenResult accessToken = appIdentity.getAccessToken(scopes); 
urlConnection.setRequestProperty("Authorization","Bearer "+accessToken.getAccessToken());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM