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

如何通过Service Account与API访问共享Google Drive文件夹

使用Google服务账号无登录访问Drive公开文件夹图片

核心逻辑

服务账号是Google专为服务器端无交互场景设计的授权方式,能彻底避开OAuth登录弹窗,关键要做好服务账号权限配置和代码授权逻辑替换。

第一步:服务账号配置(必做)

  • 登录Google Cloud控制台,创建服务账号并下载对应的credentials.json密钥文件
  • 将目标公开Drive文件夹的查看权限授予服务账号的邮箱(格式为xxx@xxx.iam.gserviceaccount.com,在服务账号详情页可找到)——哪怕文件夹是公开状态,这一步也不能省,否则服务账号无法通过API读取内容

第二步:代码修改(替换原有OAuth登录逻辑)

假设你原有代码采用OAuth桌面授权流,现在替换为服务账号授权逻辑:

依赖安装(未安装则执行)

pip install google-api-python-client google-auth-httplib2 google-auth-oauthlib

核心代码替换

删除原有弹出登录窗口的OAuth代码,改用以下服务账号授权逻辑:

from google.oauth2 import service_account
from googleapiclient.discovery import build

# 替换为你的服务账号密钥文件路径
SERVICE_ACCOUNT_FILE = 'credentials.json'
# 仅需只读权限,范围不要随意扩大
SCOPES = ['https://www.googleapis.com/auth/drive.readonly']

# 构建服务账号凭证
credentials = service_account.Credentials.from_service_account_file(
    SERVICE_ACCOUNT_FILE, scopes=SCOPES)

# 初始化Drive API服务
drive_service = build('drive', 'v3', credentials=credentials)

# 获取指定文件夹下所有图片
def fetch_folder_images(folder_id):
    # 筛选条件:属于目标文件夹、MIME类型为图片
    query = f"'{folder_id}' in parents and mimeType contains 'image/'"
    results = drive_service.files().list(
        q=query,
        fields="files(id, name, webContentLink)"
    ).execute()
    return results.get('files', [])

# 调用示例:替换为你的公开文件夹ID
target_folder_id = 'your_public_folder_id'
images = fetch_folder_images(target_folder_id)
for img in images:
    print(f"图片名称: {img['name']}, 直接下载链接: {img['webContentLink']}")

关键注意事项

  • 服务账号必须被添加为文件夹查看者:即使文件夹是公开的,服务账号作为独立身份,仍需被明确授予权限才能通过API访问
  • 权限范围仅用drive.readonly即可:避免使用更高权限范围,减少权限风险
  • 关于文档中"Authorization optional":这指的是匿名访问公开文件,但匿名访问有请求频次限制,且无法稳定批量读取,服务账号是更可靠的无登录解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:25:12