Google Drive PHP API会返回已删除的文件

时间:2015-04-03 14:47:37

标签: php google-drive-api

我正在尝试使用服务在Amazon S3和Google Drive之间同步文件。

我创建了一个服务帐户并与其电子邮件共享了一个文件夹。 然后使用我构建的自动服务,我创建了一些文件夹。

在我尝试从Google云端硬盘UI中删除这些文件夹之前,一切都很顺利。他们从用户界面中消失了,但我的服务仍然像他们在场一样收到它们。 这是我用来列出文件/文件夹的代码:

private function retrieveAllGoogleDriveFiles($service) {
    $result = array();
    $pageToken = NULL;
    do {
        try {
            $parameters = array();
            if ($pageToken) {
                $parameters['pageToken'] = $pageToken;
            }
            $parameters['q'] = "trashed=false";
            $files = $service->files->listFiles($parameters);

            $result = array_merge($result, $files->getItems());
            $pageToken = $files->getNextPageToken();
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
            $pageToken = NULL;
        }
    } while ($pageToken);
    return $result;
}

这是我正在使用的授权机制:

        $credentials = new Google_Auth_AssertionCredentials(
            '1234567890-somehashvalueshere123123@developer.gserviceaccount.com',
            array('https://www.googleapis.com/auth/drive'),
            $private_key,
            'notasecret',                                
            'http://oauth.net/grant_type/jwt/1.0/bearer'
        );

        $googleClient = new Google_Client();
        $googleClient->setAssertionCredentials($credentials);
        if ($googleClient->getAuth()->isAccessTokenExpired()) {
            $googleClient->getAuth()->refreshTokenWithAssertion();
        }

        $googleService = new Google_Service_Drive($googleClient);
        $files_list = $this->retrieveAllGoogleDriveFiles($googleService);

用户从Google云端硬盘删除文件/文件夹的情况对我来说是真实的,我应该同步回S3并从那里删除文件/文件夹。

提前致谢。

1 个答案:

答案 0 :(得分:0)

当多个用户共享文件夹时,所有者可以删除文件夹而不是其他用户。

基本上发生的事情是点击'删除',用户将其从驱动器中取消(取消订阅),他们不会删除该文件夹。这就是它出现在您的服务帐户文件列表中的原因。

一种可能的解决方案解决方案是更改所有者,以便非服务帐户拥有该文件。在这种情况下,删除真的将是一个垃圾/删除操作。但是,如果不了解您的用例/底层问题需要解决,很难通过解决方案。如果用户是企业/工作帐户而不是私人/个人帐户,其中一些可能会更容易。