Google Drive API PHP(创建文件夹)

时间:2019-08-12 18:39:16

标签: php google-drive-api

我在使用Google Drive API在Google Drive上创建文件夹时遇到问题。 该脚本通过这部分代码成功地向我显示了我在Google驱动器上拥有的所有文件。

// Print the names and IDs for up to 10 files.
$optParams = array(
  'pageSize' => 10,
  'fields' => 'nextPageToken, files(id, name)'
);
$results = $service->files->listFiles($optParams);

if (count($results->getFiles()) == 0) {
    print "No files found.<br>";
} else {
    print "Files:<br>";
    foreach ($results->getFiles() as $file) {
        printf("%s (%s)<br>", $file->getName(), $file->getId());
    }
}

但不会从这部分代码中创建文件夹

// Create Test folder
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Test',
    'mimeType' => 'application/vnd.google-apps.folder'));
$file = $service->files->create($fileMetadata, array(
    'fields' => 'id'));
printf("<br>Folder ID: %s<br>", $file->id);

有我的php脚本的完整代码。

<?php
require __DIR__ . '/google-api-php-client/vendor/autoload.php';


function getClient()
{
    $client = new Google_Client();
    $client->setApplicationName('Test Google Drive API');
    $client->setScopes(Google_Service_Drive::DRIVE_METADATA_READONLY);
    $client->setAuthConfig('client_secret.json');

    // Load previously authorized token from a file, if it exists.
    // The file token.json stores the user's access and refresh tokens, and is
    // created automatically when the authorization flow completes for the first
    // time.
    $tokenPath = 'token.json';
    if (file_exists($tokenPath)) {
        $accessToken = json_decode(file_get_contents($tokenPath), true);
        $client->setAccessToken($accessToken);
    }

    // If there is no previous token or it's expired.
    if ($client->isAccessTokenExpired()) {
        // Refresh the token if possible, else fetch a new one.
        if ($client->getRefreshToken()) {
            $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        } else {
            // Request authorization from the user.
            $authUrl = $client->createAuthUrl();
            printf("Open the following link in your browser:\n%s\n", $authUrl);
            print 'Enter verification code: ';
            $authCode = trim(fgets(STDIN));

            // Exchange authorization code for an access token.
            $accessToken = $client->fetchAccessTokenWithAuthCode($authCode);
            $client->setAccessToken($accessToken);

            // Check to see if there was an error.
            if (array_key_exists('error', $accessToken)) {
                throw new Exception(join(', ', $accessToken));
            }
        }
        // Save the token to a file.
        if (!file_exists(dirname($tokenPath))) {
            mkdir(dirname($tokenPath), 0700, true);
        }
        file_put_contents($tokenPath, json_encode($client->getAccessToken()));
    }
    return $client;
}


// Get the API client and construct the service object.
$client = getClient();
$service = new Google_Service_Drive($client);

// Print the names and IDs for up to 10 files.
$optParams = array(
  'pageSize' => 10,
  'fields' => 'nextPageToken, files(id, name)'
);
$results = $service->files->listFiles($optParams);

if (count($results->getFiles()) == 0) {
    print "No files found.<br>";
} else {
    print "Files:<br>";
    foreach ($results->getFiles() as $file) {
        printf("%s (%s)<br>", $file->getName(), $file->getId());
    }
}

// Create Test folder
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Test',
    'mimeType' => 'application/vnd.google-apps.folder'));
$file = $service->files->create($fileMetadata, array(
    'fields' => 'id'));
printf("<br>Folder ID: %s<br>", $file->id);

错误:Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ "error": { "errors": [ { "domain": "global", "reason": "insufficientPermissions", "message": "Insufficient Permission: Request had insufficient authentication scopes." } ], "code": 403, "message": "Insufficient Permission: Request had insufficient authentication scopes." } }

希望得到您的帮助。谢谢。

0 个答案:

没有答案