使用Google Drive API V2无法访问共享云端硬盘文件和文件夹问题
问题原因与解决方案
核心问题
你用Drive API V2查询共享云端硬盘内的文件夹时,未指定共享云端硬盘专属的查询参数,默认情况下Drive API V2只会检索你的个人云端硬盘内容,因此返回0个结果。
关键参数补充
要获取共享云端硬盘的文件/文件夹,必须在Drive.Files.list的参数中添加以下几项:
corpora: 'drive':指定搜索范围为特定共享云端硬盘(而非个人盘)driveId: '你的共享云端硬盘ID':目标共享云端硬盘的ID(可通过浏览器地址栏获取,格式类似0ABC...XYZ)includeItemsFromAllDrives: true:允许返回共享云端硬盘中的项目supportsAllDrives: true:声明脚本支持访问共享云端硬盘
修改后的代码
function countFolderFolders() { var folderId = 'ABCD123'; // 替换为目标文件夹ID var driveId = 'SHARED_DRIVE_ID'; // 替换为你的共享云端硬盘ID var driveApi; try { driveApi = Drive.Files.list({ q: "'" + folderId + "' in parents and trashed = false and mimeType = 'application/vnd.google-apps.folder'", maxResults: 1000, corpora: 'drive', driveId: driveId, includeItemsFromAllDrives: true, supportsAllDrives: true }); } catch (e) { Logger.log('Drive API Error: ' + e.toString()); return; } if (driveApi && driveApi.items) { var folderCount = driveApi.items.length; // 因为查询已经过滤了文件夹类型,直接取长度即可 Logger.log('目标文件夹(ID:' + folderId + ')内的子文件夹数量为:' + folderCount); } else { Logger.log('未找到子文件夹或发生错误。'); } testAccount(); } function testAccount() { var email = Session.getActiveUser().getEmail(); Logger.log('脚本运行账户:' + email); }
额外说明
- 关于DriveApp超时问题:如果目标文件夹内容较多,DriveApp的
getFolders()方法可能因加载延迟超时,改用带参数的Drive API查询会更高效。 - 权限验证:确保你启用的Drive API是V2版本(在脚本编辑器的「资源」→「高级Google服务」中确认),且运行账户确实拥有共享云端硬盘的组织者权限。
内容的提问来源于stack exchange,提问作者Glib Gibon
相关产品推荐
相关产品推荐

