【发布时间】:2016-06-06 22:11:26
【问题描述】:
我正在寻找将文件上传到存储桶的absolute minimal 要求。以及所需的最少代码。
我拥有的最少 oAuth/API 密钥信息来自 console.cloud.google.com/apis/credentials/oauthclient/
-
clientId:来自凭据页面的客户端 ID。 -
apiKey:凭据页面中的客户端密码? -
scopes: 'https://www.googleapis.com/auth/devstorage.read_write' (为什么叫devstorage?好像它只供开发人员使用?还是device的缩写?
我不确定 apiKey 是否正确,但从示例中使用它不会引发错误:
// This is triggered after the `client.js` loads
function handleClientLoad() {
gapi.client.setApiKey(apiKey);
window.setTimeout(checkAuth,1);
}
function checkAuth() {
gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true}, handleAuthResult);
}
所以,这是第一步,但如果我错了,请纠正我。
现在处理 Auth Result:
function handleAuthResult(authResult) {
if (authResult && !authResult.error) {
makeApiCall();
}
}
我有点卡住了,我正在处理一个例子:https://developers.google.com/api-client-library/javascript/start/start-js
当它到达gapi.client.plus.people 时它停止工作,其中people 未定义。这是因为我有一个匿名用户,并且有一个公共 API 密钥。稍后我将实现每个用户的 ACL,但现在我只需要它来工作/上传。
现在,我在 Amazon Cloud 上做了类似的工作,有一个简单的基于 jQuery 的小部件,可以上传文件,我只需要输入他们的 API-key 和存储桶名称(在 PHP不幸的是)。
我会很高兴只使用一个简单的<form>,但我遇到的示例中包含的信息/字段比上述 3 个最小数据(clientId、apiKey、范围)和存储桶的附加 url (像奇怪的加密 acl 字符串)
我知道bucket-name.storage.googleapis.com 是文件的最终位置,并且在我手动上传图片时有效。
我现在正在寻找绝对最小的代码,最好是 javascript,使用 google client 所以使用类似的东西(我在另一个例子中找到):
gapi.client.request({
'path': '/upload/storage/' + API_VERSION + '/b/' + BUCKET + '/o',
'method': 'POST',
'params': {'uploadType': 'media'}
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
}
我需要API_VERSION吗?如何找出使用哪个path?我知道我的bucket 名字,但upload/storage/ 是从哪里来的?和/b/? (虽然https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload 表明我需要它)
该示例使用了带有boundary 的标头,但我找不到任何关于它的信息,而且我可能也不需要它。问题是我找不到任何minimally 所需的标头。
我遇到了'x-goog-acl': 'public-read',这需要在标题中吗?
总结一下,我想回答的问题:
- 我至少需要将哪些标头上传到
allUsers访问权限设置为Owner的存储桶(我知道,这不是最好的主意,这将在未来发生变化) - 任何关于如何从
html表单获取文件并使用ajax发送请求或使用gapi的示例代码,我认为这是为了做到这一点。
我希望我的问题很清楚,我基本上不知道从哪里开始/找到正确的代码示例。虽然这可能与 google javascript 客户端 api 位于 beta..
【问题讨论】:
标签: google-cloud-storage google-client google-api-js-client