无法通过Google API(PHP)将文件上传到Google云端硬盘

时间:2017-02-16 07:03:57

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

当我尝试通过Google API(https://github.com/google/google-api-php-client)将文件上传到Google云端硬盘时,我收到错误消息"权限不足" (阅读文件没有任何问题)。这是代码示例:

require_once 'google-api-php-client/vendor/autoload.php';

class GoogleConnector {
    private $client;
    public $report;

    function __construct($filesToSend, $backupFolder) {
        session_start();
        $this->client = new Google_Client();
        $this->client->setAuthConfig('client_secret.json');
        $this->client->addScope("https://www.googleapis.com/auth/drive");
        //also try different variants of this:
        //$this->client->setScopes(implode(' ', array(Google_Service_Drive::DRIVE)));

        if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
            $this->client->setAccessToken($_SESSION['access_token']);
            $service = new Google_Service_Drive($this->client);
            $folderId = "FolderIdFromGoogleDrive";

            $this->report = "";
            foreach ($filesToSend as $file) {
                $this->report .= $this->uploadFile($file, $folderID, $service);
            }
        }
        else {
            $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/googleapi/oauth2callback.php';
            header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
        }
    }

    function uploadFile($fileName, $folderID, Google_Service_Drive $driveService) {
        $fileMetadata = new Google_Service_Drive_DriveFile(array(
                'name' => $fileName,
                'parents' => array($folderId)
        ));

        try {
            $content = file_get_contents($fileName);
            $file = $driveService->files->create($fileMetadata, array(
                    'data' => $content,
                    'mimeType' => 'application/x-gzip',
                    'uploadType' => 'multipart',
                    'fields' => 'id'));
            return "File '$fileName' uploaded with id '$file->id'" . PHP_EOL;
        }
        catch (Exception $exc) {
            return "Error working with file '$fileName':" . $exc->getMessage();
        }
    }
}

我该如何解决?

1 个答案:

答案 0 :(得分:0)

确保您有效Permissions for the file。您必须将权限角色设置为“所有者”,并将角色设置为用户(因为您正在进行上传)。

您可以在About Permissions

上阅读更多相关信息