我想从某些控制台命令将文件上传到谷歌云。据我所知,不能用OAuth2做,所以我需要使用Api键。但没有任何作用。我试过这个
$ch = curl_init();
$url = 'https://www.googleapis.com/upload/storage/v1/b/temp/o?uploadType=media&name=p11&key='.$this->key;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: key '.$this->key
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '@/var/www/test.txt');
$content = curl_exec($ch);
var_dump($content);
有一个错误:
{ "error": { "errors": [ { "domain": "global", "reason": "authError", "message": "Invalid Credentials",
"locationType": "header", "location": "Authorization" } ],
"code": 401, "message": "Invalid Credentials" } }
我试过php-sdk
$client = new Google_Client();
$client->setApplicationName("alasdg");
$client->setDeveloperKey($this->key);
$client->setScopes(['https://www.googleapis.com/auth/devstorage.read_write']);
$client->getAuth();
$storageService = new Google_Service_Storage($client);
$buckets = $storageService->buckets->listBuckets('temp');
var_dump($buckets);exit;
错误是:
Error calling GET https://www.googleapis.com/storage/v1/b?project=temp&key=afJwBJWucqvIU: (400) Invalid argument.
我可以上传没有OAuth2的文件吗?
答案 0 :(得分:3)
Invalid Credentials
错误表示您的Authorization
标头在某种程度上无效,您需要刷新OAuth 2.0访问令牌。鉴于API密钥不是有效的访问令牌,这可以解释它。你可能想构建一个看起来像Authorization: Bearer ya29.xxxxxxxx
的标题,其中" ya29"等等是访问令牌。凭证交换由php-sdk代表您完成。
您遇到的第二个错误,因为很可能没有项目ID为" temp"的项目。它有点像一个问题,因为你可以指定一个友好的名字"到您的项目,但该名称可以在许多项目之间共享,而不是唯一的标识符。您必须使用指定的项目ID,或者,如果您尚未为项目ID分配,则可以使用数字项目ID,当您在https://console.developers.google.com/中查看时,该ID可在URL中看到
答案 1 :(得分:2)
读写操作始终需要正确的身份验证和授权,即OAuth2令牌(more info)。只使用API密钥,您将被限制为匿名只读API访问(假定目标资源被标记为公共)。