You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Python创建Google Drive文件夹失败求助

使用Python创建Google Drive文件夹失败求助

看起来你已经搭好了基础的认证和文件夹创建框架,但大概率是代码没写完或者遇到了权限类的坑?先帮你把完整的实现补全,再聊聊这类问题最容易踩的几个点:

首先补全你的代码

你原来的CreateFolder函数没写完,完整的创建逻辑应该包含调用Drive API的files().create接口,同时加上更完善的错误处理,这样能快速定位问题:

import os
import google.auth
from googleapiclient.discovery import build
from google.oauth2 import service_account
from googleapiclient.errors import HttpError

SCOPES = ['https://www.googleapis.com/auth/drive']
SERVICE_ACCOUNT_FILE = 'assets/key/key.json'

def Authenticate():
    try:
        creds = service_account.Credentials.from_service_account_file(
            SERVICE_ACCOUNT_FILE, scopes=SCOPES)
        print('Authentication Successful')
        return creds
    except Exception as e:
        print(f"Authentication failed: {str(e)}")
        return None

def CreateFolder(parent_folder_id=None):
    creds = Authenticate()
    if not creds:
        return None
    
    try:
        service = build("drive", "v3", credentials=creds)
        
        folder_metadata = {
            "name": "AutoUpload",
            "mimeType": "application/vnd.google-apps.folder"
        }
        # 如果要把文件夹创建在你个人Drive的某个文件夹下,需要指定父文件夹ID
        if parent_folder_id:
            folder_metadata["parents"] = [parent_folder_id]
        
        # 调用API创建文件夹,指定返回ID字段
        response = service.files().create(
            body=folder_metadata,
            fields='id'
        ).execute()
        
        print(f"Folder created successfully! Folder ID: {response.get('id')}")
        return response.get('id')
    
    except HttpError as error:
        print(f"创建文件夹时出错:{error}")
        return None

# 运行示例
if __name__ == "__main__":
    # 可选:如果要创建到你个人Drive的文件夹,替换成你的目标文件夹ID
    # 文件夹ID可以从Drive的URL里获取:https://drive.google.com/drive/folders/[这里就是ID]
    # target_parent_id = "your-personal-drive-folder-id"
    # CreateFolder(target_parent_id)
    
    # 默认创建在服务账号自己的Drive存储空间里
    CreateFolder()

最容易踩的几个坑

  1. 看不到创建的文件夹
    服务账号有自己独立的Google Drive存储空间,默认你在个人Drive里是看不到它创建的文件夹的。解决办法:

    • 把服务账号的邮箱(在key.json里的client_email字段)添加到你个人Drive某个文件夹的共享列表(赋予编辑权限),然后创建时指定这个文件夹为父目录
    • 或者把服务账号创建的文件夹共享给你的个人邮箱
  2. 认证失败

    • 检查SERVICE_ACCOUNT_FILE的路径是否正确,确保key.json文件存在且能被读取
    • 确认key.json是从Google Cloud控制台正确下载的服务账号密钥
  3. 权限报错(403)

    • 如果指定了父文件夹ID,要确保服务账号已经被添加为该文件夹的编辑者
    • 检查SCOPES是否正确,你用的https://www.googleapis.com/auth/drive是全权限,没问题,但如果是更严格的权限要确保覆盖创建文件夹的需求
  4. 找不到资源报错(404)
    大概率是指定的父文件夹ID错误,或者服务账号没有权限访问这个文件夹,仔细核对ID和共享设置

备注:内容来源于stack exchange,提问作者Kingdawnage

火山引擎 最新活动