Google云端分段上传返回 - (403)权限不足

时间:2015-01-06 13:25:21

标签: php google-drive-api google-api-php-client

我正在尝试使用服务帐户将文件上传到驱动器。我收到以下错误,说明权限不足。

调用POST https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart时出错:(403)权限不足'

这是我的总代码。

$client_id = '69649809374-ib5c5qmr7n34adsfsdfsxxxifss95ue7qouplh7v3r.apps.googleusercontent.com'; //Client ID
$service_account_name = '269649809374-ib5c5qmr7n34aifss95ue7qouplh7v3r@developer.gserviceaccount.com'; //Email Address
$key_file_location = 'secretkey.p12'; //key.p12

echo pageHeader("Service Account Access");
if ($client_id == '269649809374-b5c5qmr7n34aifss95ue7qouplh7v3r.apps.googleusercontent.com'
    || !strlen($service_account_name)
    || !strlen($key_file_location)) {
      echo missingServiceAccountDetailsWarning();
         }

$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");

if (isset($_SESSION['service_token']))
    {
    $client->setAccessToken($_SESSION['service_token']);
    }
$key = file_get_contents($key_file_location);

$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/drive'),
    $key);

$client->setAssertionCredentials($cred);
$client->addScope("https://www.googleapis.com/auth/drive");

if ($client->getAuth()->isAccessTokenExpired()) {
   $client->getAuth()->refreshTokenWithAssertion($cred);
   }
$_SESSION['service_token'] = $client->getAccessToken();


$service = new Google_Service_Drive($client);

$file = new Google_Service_Drive_DriveFile();
$parentId='0B7yersFxlKMTR2RsMThQSG1RUVk';
$parent = new Google_Service_Drive_ParentReference();

// create a file

DEFINE("TESTFILE", 'testfile-small.txt');
if (!file_exists(TESTFILE)) 
                      {
                     $fh = fopen(TESTFILE, 'w');
                      fseek($fh, 1024 * 1024);
                     fwrite($fh, "this is sekhar", 1);
                       fclose($fh);
                        }

                     $parent->setId($parentId);
                     $file->setParents(array($parent));
                      $file->setTitle("I am service Account");

                   $result = $service->files->insert($file,array('data' => file_get_contents(TESTFILE),
        'mimeType' => 'application/octet-stream',
        'uploadType' => 'media'));

我的代码有问题。

1 个答案:

答案 0 :(得分:2)

403) Insufficient Permission' 

表示您的服务帐户无法按照您的要求执行操作。

我要检查的第一件事是您已正确地授予服务帐户访问相关目录的权限。它是您的驱动器上的一个还是服务帐户拥有的一个? (您授予服务帐户访问驱动器文件夹的权限,就像普通用户获取服务帐户电子邮件地址并添加它一样,它将需要写入权限。)

由于您没有执行目录列表,因此您可能还需要仔细检查是否具有正确的目录ID。或者只使用root来测试上传代码。

'0B7yersFxlKMTR2RsMThQSG1RUVk'