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

Python调用Google Drive API上传文件遇权限拒绝问题求助

权限拒绝错误的排查与修复方案

核心问题:路径指向错误

你代码里的client_secrets_file变量指向的是文件夹路径(C:\Users\Gürkan\Desktop\ana proje),但from_client_secrets_file方法需要的是具体的credentials.json文件路径。程序尝试读取文件夹作为配置文件,直接触发了权限拒绝错误。

其他代码隐患

除了路径问题,代码里还有几处可能导致后续报错的细节:

  • Credentials.from_authorized_user_file调用时缺少必要参数,需要传入token.json路径和权限范围SCOPES
  • 最后一步上传文件的请求没有执行execute()方法,会导致请求无法发送
  • 若当前工作目录没有写入权限,保存token.json时也可能触发权限问题

修复后的代码示例

import os
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload
from google.auth.transport.requests import Request

# 定义所需权限范围,可根据实际需求调整
SCOPES = ['https://www.googleapis.com/auth/drive.file']

creds = None
# 修改为credentials.json的完整文件路径
client_secrets_file = r'C:\Users\Gürkan\Desktop\ana proje\credentials.json'
token_path = 'token.json'

if os.path.exists(token_path):
    # 补充token文件路径和权限范围参数
    creds = Credentials.from_authorized_user_file(token_path, SCOPES)

if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file(
            client_secrets_file, SCOPES)
        creds = flow.run_local_server(port=0)
    # 若当前目录无写入权限,可将token_path改为绝对路径
    with open(token_path, 'w') as token:
        token.write(creds.to_json())

service = build('drive', 'v3', credentials=creds)

# 创建Google Sheets文件
file_metadata = {
    'name': 'sign_up',
    'parents': ['<folder-id>'],  # 替换为实际的Google Drive文件夹ID
    'mimeType': 'application/vnd.google-apps.spreadsheet'
}
file = service.files().create(body=file_metadata, fields='id').execute()
file_id = file.get('id')

# 上传CSV文件到创建的Sheets中
file_metadata = {'name': 'sign_up', 'parents': [file_id]}
media = MediaFileUpload('sign_up.csv', mimetype='text/csv')
# 补充execute()执行上传请求
file = service.files().create(
    body=file_metadata,
    media_body=media,
    fields='id').execute()

print(f"文件上传完成,ID: {file.get('id')}")

额外检查项

  • 确认credentials.json文件确实存在于你指定的路径下
  • 确保运行Python程序的用户对C:\Users\Gürkan\Desktop\ana proje文件夹和当前工作目录有读写权限
  • 验证Google API控制台中已启用Drive API和Sheets API,且凭证文件的OAuth 2.0客户端ID配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:29