Node.js调用googleapis读取谷歌Drive公开共享文件夹返回空数组求解
解决Google Drive服务账号无法读取共享文件夹文件的问题
问题分析
你的代码返回空数组,核心原因是服务账号的Drive API查询默认仅搜索自身存储的文件,即便文件夹已共享给服务账号,也需调整查询参数让API包含共享资源。另外,你使用文件夹ID的方向是对的,但查询缺少关键配置项。
修正后的代码实现
以下是调整后的可运行代码,重点补充了includeItemsFromAllDrives和supportsAllDrives两个关键参数,同时优化了查询逻辑:
const googleDrive = async() => { const drive = google.drive({version: 'v3', auth}) return drive } export const readPublicGoogleFolder = async(folderId: string) => { try{ const gd = await googleDrive(); const publicFiles = await gd.files.list({ q: `'${folderId}' in parents`, includeItemsFromAllDrives: true, // 包含他人共享给服务账号的文件 supportsAllDrives: true, // 启用对共享资源的API支持 fields: 'files(id, name, createdTime, mimeType)', // 指定需返回的字段,按需扩展 pageSize: 100 // 分页大小,可根据文件夹内文件数量调整 }) console.log({publicFiles}) return publicFiles; } catch(err: any){ console.log({err}); return null; } }
关键参数说明
includeItemsFromAllDrives: true:让API查询范围覆盖服务账号自身Drive及所有共享给它的资源supportsAllDrives: true:必须与上一参数配合使用,启用对共享驱动器/文件夹的API支持,否则会返回空结果或报错fields:明确指定返回字段,既减少冗余数据,也能获取识别每日新CSV所需的信息(比如createdTime、name)
额外验证项
- 确认共享文件夹是直接共享给服务账号的邮箱(而非仅生成公开链接),权限至少为“查看者”
- 检查Google Cloud Console中,服务账号对应的项目已启用Google Drive API
- 若目标文件夹属于共享驱动器(Shared Drive),需确保服务账号已被添加到该共享驱动器的成员列表中
内容的提问来源于stack exchange,提问作者Patrick Conrad
相关产品推荐
相关产品推荐

