如何通过Google Drive API判断文件归属及解决spaces参数异常?
Google Drive 变更同步脚本问题与解决方案
原脚本代码
$idChangeHistory = [] ; do { $response = $service->changes->listChanges($startPageToken, [ 'spaces' => 'drive' ] ) ; if ( (! is_null($response->newStartPageToken))) { $savedStartPageToken = $response->newStartPageToken ; $historyRow['nextStartPageToken'] = $savedStartPageToken ; $updateHistory = true ; } // 收集变更ID:单个文件可能有多次变更,我们只关心文件是否变更,不统计变更次数 foreach ($response->changes as $change) { $googleId = $change->fileId ; if (array_key_exists($googleId, $idChangeHistory)) $idChangeHistory[$googleId]['count']++ ; else $idChangeHistory[$googleId] = [ 'count' => 1 ] ; $idChangeHistory[$googleId]['removed'] = $change->removed ; // 标记文件是否已从云端永久删除 } $startPageToken = $response->nextPageToken ; } while ($startPageToken) ; foreach ($idChangeHistory as $googleId => $elements) { // 处理每个变更对象 $fileObj = $service->files->get($googleId, [ 'fields' => 'id,name,mimeType,fileExtension,size,parents,createdTime,modifiedTime,trashed,md5Checksum' ] ) ; // ... 此处编写对象处理逻辑 }
问题描述
脚本整体运行正常,但偶尔会出现不属于自身Google Drive的「幽灵文件」:
- 他人共享给我且近期打开过的文件
- 我共享出去的非Drive原生文件(如Google Sheets)
原本以为通过spaces参数设为drive可以过滤这类文件,但实际并未生效。目前通过判断父文件夹值是否为null识别共享文件,但该方法不可靠。曾查阅文档提到共享文件与自有Drive文件的部分属性「未填充」,但实际发现这些属性大多为null,甚至driveId在两类文件中均为null。
核心疑问与解答
1. 如何可靠判断文件是自有Drive文件还是共享文件?
通过扩展files->get接口的fields参数,新增ownedByMe字段即可直接判断:
ownedByMe为true:文件是你自己拥有的自有Drive文件ownedByMe为false:文件是共享文件
2. 如何区分共享文件是他人共享给我,还是我共享出去的?
结合owners和permissions字段分析:
- 若
owners[0]->emailAddress不是你的邮箱,但permissions中包含你的访问权限:说明是他人共享给你的文件 - 若
owners[0]->emailAddress是你的邮箱,且permissions中存在其他用户的访问权限:说明是你共享出去的文件
3. 为什么设置spaces=>'drive'仍会出现共享文件?
spaces=drive参数的作用是包含用户「Drive空间」内的所有文件,这不仅包括自己的My Drive文件,还涵盖了已添加到Drive的共享文件、近期访问过的共享文件等。它本身不具备过滤共享文件的功能,因此这类文件仍会出现在变更列表中。
解决方案更新
修改files->get的fields参数,新增关键归属字段后可实现可靠判断:
$fileObj = $service->files->get($googleId, [ 'fields' => 'id,name,mimeType,fileExtension,size,parents,createdTime,modifiedTime,trashed,ownedByMe,driveId,owners,permissions,md5Checksum' ] ) ;
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

