0

我正在尝试使用 PHP 将文件上传到 Google Drive。

对于授权代码,我使用以下范围:

https://www.googleapis.com/auth/drive  
https://docs.google.com/feeds/  
https://docs.googleusercontent.com/  
https://spreadsheets.google.com/feeds/  

我已经收到了一个有效refresh_token的 ,我可以随时用它来获取一个新的access_token

现在的问题是当我尝试使用它执行上传时access_token它没有过期,也没有使用)它说:

stdClass Object
(
    [error] => stdClass Object
        (
            [errors] => Array
                (
                    [0] => stdClass Object
                        (
                            [domain] => global
                            [reason] => required
                            [message] => Login Required
                            [locationType] => header
                            [location] => Authorization
                        )

                )

            [code] => 401
            [message] => Login Required
        )
)

我正在使用带有以下标题的 curl:

Array
(
    [0] => Content-Type: text/plain
    [1] => Content-Length: 503242
    [2] => Authorization: Bearer ya29.AHES6ZRWXZkZDDi6AFV9PK2QonHp93nIfJbYqipXFT1uCsg
    [3] => GData-Version: 3.0
)

和以下网址:

https://www.googleapis.com/upload/drive/v2/files?uploadType=media

CURL 命令类似于:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADERS, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($file));
$return = curl_exec($ch);
curl_close($ch);

任何帮助将不胜感激......在此先感谢......

4

3 回答 3

2

您需要将文件上传到云端硬盘的唯一 OAuth 范围是https://www.googleapis.com/auth/drive.file.

对于所有可能的范围,请查看文档:https ://developers.google.com/drive/scopes

顺便说一句,Drive API 不是基于 GData 的,因此您不需要将GData-Version标头添加到您的请求中。

我还建议您将您的请求与 OAuth 2.0 Playground 发送的请求进行比较,以便轻松发现错误:

https://developers.google.com/oauthplayground/

于 2012-08-28T17:19:04.927 回答
0

尝试使用以下范围: https ://www.googleapis.com/auth/drive.file

还要验证您是否已彻底完成文档中给出的步骤

https://developers.google.com/drive/about-auth

如果不想使用 curl,可以使用 Googlephpclientlibarary 的 insert 方法插入文件。

否则,将请求与 Claudio 提到的 OauthPlayground 进行比较

于 2012-08-30T11:28:37.980 回答
0

CURLOPT_HTTPHEADER ,而不是 CURLOPT_HTTPHEADERS

于 2015-10-17T18:53:41.970 回答