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

我试图弄清楚如何在
Android中使用JSON API将图像上传到Google云端存储,但这样做的文档似乎非常有限.

我相信的问题是获得正确的API密钥身份验证.上传的图片是公开的图片,但仅向我的应用用户公开,因此阅读Authorize Requests文档说我不需要为公共数据提供OAuth密钥,我只需发送一个API密钥

Public API access: A request that does not provide an OAuth 2.0 token
must send an API key. The key identifies your project and provides API
access, quota, and reports.

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

这些API密钥是正确的,因为它们与谷歌登录等其他谷歌服务一起使用,它们工作正常.

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

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");

但我得到错误401未经授权,所以我假设它是我发送的密钥的问题.

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

After you have an API key, your application can append the query
parameter key=yourAPIKey to all request URLs.

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

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

最佳答案 您可以使用API​​密钥下载公共对象.

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

在你的情况下,我想你可能想要使用Signed URLs.

点赞