我正在尝试使用服务在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并从那里删除文件/文件夹。
提前致谢。
答案 0 :(得分:0)
当多个用户共享文件夹时,所有者可以删除文件夹而不是其他用户。
基本上发生的事情是点击'删除',用户将其从驱动器中取消(取消订阅),他们不会删除该文件夹。这就是它出现在您的服务帐户文件列表中的原因。
一种可能的解决方案解决方案是更改所有者,以便非服务帐户拥有该文件。在这种情况下,删除真的将是一个垃圾/删除操作。但是,如果不了解您的用例/底层问题需要解决,很难通过解决方案。如果用户是企业/工作帐户而不是私人/个人帐户,其中一些可能会更容易。