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
相关产品推荐
相关产品推荐

