You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:05:55