使用php将文件上传到相同的google驱动器

时间:2014-08-11 14:40:31

标签: php codeigniter google-drive-api

我想知道是否有任何方法可以使用php将文件直接上传到我们自己的Google驱动器,目前我正在使用这样的方法。

            $drive = new Google_Client();
            $drive->setClientId($client_id);
            $drive->setClientSecret($client_secret);
            $drive->setRedirectUri($redirect_uri);
            $drive->setScopes(array('https://www.googleapis.com/auth/drive'));

            $gdrive = new Google_DriveService($drive);

            $_GET['code'] = 'ya2-------------------------OZXiA';

            //file_put_contents('token.json', $drive->authenticate());

            $drive->setAccessToken(file_get_contents('token.json'));

            $doc = new Google_DriveFile();

            $doc->setTitle('Test Document');
            $doc->setDescription('Test description');
            $doc->setMimeType('text/plain');

            $content = file_get_contents('/assets/new--detils.txt');

            $output = $gdrive->files->insert($doc, array(
                'data' => $content,
                'mimeType' => 'text/plain',
            ));
            print_r($output);

但这显示错误为

致命错误:未捕获的异常Google_AuthException,其中包含错误“获取OAuth2访问令牌时出错,消息:'{invalid_grant''/var/www/path/src/auth/Google_OAuth2.php:115

我在这里使用为该应用生成的$_GET['code'] = 'ya2-------------------------OZXiA'

任何人都可以建议一种方法来做到这一点,提前谢谢。

2 个答案:

答案 0 :(得分:1)

不确定是否有帮助,但我发现这是通过Google代码查找...

"当您尝试使用相同的授权码时,您将收到invalid_grant错误。"

我在这里找到了它:https://code.google.com/p/google-api-php-client/issues/detail?id=94

不确定这是否会对您有所帮助......

还找到了本教程:http://25labs.com/tutorial-implementing-google-api-using-oauth-2-0-in-php/

答案 1 :(得分:0)

 $drive = new Google_Client();
 $drive->setClientId($client_id);
 $drive->setClientSecret($client_secret);
 $drive->setRedirectUri($redirect_uri); 
 **$drive->setAccessType('offline');**
 $authUrl = $client->createAuthUrl();
 echo $authUrl;

现在转到auth url并获取刷新令牌和其他内容。 确保这是您第一次请求许可,如果您不能获得将来制作authtokens所必需的refreshtoken。 如果您已经授予权限,只需转到您的Google帐户并撤消该应用的权限即可。 这是您在重定向的文件中应该具有的内容。

$tokeninfo = $drive->getAccessToken();
print_r($tokeninfo);

现在将tokeninfo保存在" token.json"。

等文件中

现在返回原始文件,其中包含要上传的代码。

$drive = new Google_Client();
$drive->setClientId($client_id);
$drive->setClientSecret($client_secret);
$drive->setRedirectUri($redirect_uri);
$drive->setScopes(array('https://www.googleapis.com/auth/drive'));
$drive->setAccessType('offline');
$service = new Google_Service_Drive($drive);
$refreshToken = "Your refresh token";
/* get it from token.json and it will look some like this 1**\/**asasfasfsfsd
remove the \ since this is actually json encoded.*/

$tokens = file_get_contents(TOKEN); /*TOKEN = the token.json file*/

$drive->setAccessToken($tokens);

if ($drive->isAccessTokenExpired()) {
   $drive->refreshToken($refreshToken);
   file_put_contents(TOKEN,$drive->getAccessToken());
}
Now you have done the authentication and just need to upload the file.
if ($drive->getAccessToken()) {
$file = new Google_Service_Drive_DriveFile();
$file->title ="the file name";
/*the upload code can be found in the examples*/
}

注意 您上传的文件无法由其他人下载,您需要设置googlepermissions以使文件共享。 如果您需要编码以添加权限,请删除评论。