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

Node.js如何无需重复认证长期下载用户Google Drive内的文件

解决方案

最优方案:使用已申请的服务账号(Service Account)实现永久无人工认证

该方案完全不需要人工授权操作,令牌永久有效,也不需要走应用发布校验流程,适配你的个人使用场景。

  • 第一步:配置Drive文件访问权限
    打开Google Cloud控制台的「IAM与 admin」-「服务账号」页面,复制你创建的服务账号对应的邮箱地址。打开你要下载的XLSX文件所在的Google Drive文件夹/单个文件,点击「共享」,将刚才复制的服务账号邮箱添加为共享成员,权限选择「查看者」即可,无需发送通知。
  • 第二步:替换Node.js认证逻辑
    下载服务账号的JSON密钥文件(创建服务账号时可直接生成,存为service-account.json放到项目目录),使用以下逻辑替换原有OAuth认证代码:
const { google } = require('googleapis');
const KEYFILEPATH = './service-account.json';
// 仅申请只读权限即可满足下载需求
const SCOPES = ['https://www.googleapis.com/auth/drive.readonly'];

async function getDriveService() {
  const auth = new google.auth.GoogleAuth({
    keyFile: KEYFILEPATH,
    scopes: SCOPES,
  });
  const authClient = await auth.getClient();
  return google.drive({ version: 'v3', auth: authClient });
}

// 下载文件的示例逻辑
async function downloadXlsx(fileId, savePath) {
  const drive = await getDriveService();
  const res = await drive.files.get(
    { 
      fileId: fileId, 
      alt: 'media',
      // 如果文件在共享团队盘,需要添加下方参数
      // supportsAllDrives: true 
    },
    { responseType: 'stream' }
  );
  return new Promise((resolve, reject) => {
    const dest = require('fs').createWriteStream(savePath);
    res.data.pipe(dest);
    dest.on('finish', resolve);
    dest.on('error', reject);
  });
}

其他方案说明

  • API Key方案不可行:API Key仅能访问公开可访问的Drive文件,你的私有文件无法通过API Key调取,不满足需求。
  • 原有OAuth Client免校验延长有效期方案:如果你坚持使用现有OAuth Client,可直接在Google Cloud控制台的「API和服务」-「OAuth同意屏幕」页面,将发布状态从「测试」改为「正式版」,不需要提交谷歌校验,只要你作为唯一内部用户使用,刷新令牌的有效期会变为永久,不会出现7天过期的问题。

内容的提问来源于stack exchange,提问作者Oliver Goossens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:45:02