调用Google Drive API列取非根目录文件触发GoogleApiException 404错误如何解决
问题解决方案
错误原因
你报错的核心原因是Google Drive API的查询语法中,parents字段的匹配条件不支持直接填写文件夹名称,仅支持填写文件夹对应的唯一ID,你直接传入字符串'Admin'无法匹配到合法的资源ID,因此触发404错误。
解决步骤
第一步:先获取Admin文件夹对应的唯一ID
你可以先调用API查询所有文件夹,筛选出名称为Admin的文件夹,获取它的ID,参考代码如下:
private static string GetFolderId(string folderName) { DriveService service = GetDriveService(); FilesResource.ListRequest listRequest = service.Files.List(); // 筛选类型为文件夹、名称匹配的资源 listRequest.Q = $"mimeType = 'application/vnd.google-apps.folder' and name = '{folderName}'"; listRequest.Fields = "files(id, name)"; // 如果需要查询共享盘内的文件夹,需要加上这行 // listRequest.SupportsAllDrives = true; var files = listRequest.Execute().Files; if (files != null && files.Count > 0) { // 注意如果有多个重名文件夹,这里返回第一个匹配的,可根据自己的业务调整逻辑 return files[0].Id; } throw new Exception($"未找到名称为{folderName}的文件夹"); }
第二步:用文件夹ID构造查询条件
拿到Admin文件夹的ID后,替换原来查询语句里的'Admin'部分即可:
string adminFolderId = GetFolderId("Admin"); fileList.Q = $"mimeType != 'application/vnd.google-apps.folder' and '{adminFolderId}' in parents"; // 如果文件夹在共享盘,同样需要加这行配置 // fileList.SupportsAllDrives = true;
注意事项
- 如果你的Admin文件夹位于共享驱动器(Shared Drive)中,必须给
ListRequest对象添加SupportsAllDrives = true的配置,否则API默认只会查询你个人云盘下的资源,找不到共享盘内的文件夹。 - 如果存在多个重名的Admin文件夹,可以在获取文件夹ID的逻辑中增加父目录、创建时间等额外筛选条件,确保拿到的是目标文件夹的ID。
- 注意你申请的API权限范围要包含文件夹的读取权限,否则也可能出现找不到资源的问题。
内容的提问来源于stack exchange,提问作者Avrohom Yisroel
相关产品推荐
相关产品推荐

