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

如何实现Python脚本后台定期免登录上传文件至指定Google Drive账户

实现无交互后台上传文件到独立Google Drive账户的Python脚本

要实现无交互的后台定期上传,核心是用Google的**服务账号(Service Account)**来做认证——这种方式不需要用户手动登录,完全适合后台脚本运行。我帮你梳理下具体步骤和代码修改方案:

一、准备工作:创建并配置服务账号

  • 登录Google Cloud控制台,创建一个新项目(或使用现有项目)。
  • 在项目内搜索并启用「Google Drive API」。
  • 左侧菜单进入「IAM与管理」→「服务账号」,点击「创建服务账号」,填写名称和ID后直接完成创建(暂时不需要分配角色)。
  • 找到刚创建的服务账号,进入「密钥」标签页,点击「添加密钥」→「创建新密钥」,选择JSON格式,下载密钥文件(保存为service_account_key.json,放在脚本同目录下)。
  • 打开你的独立Google Drive账户,创建目标上传文件夹,右键选择「共享」,把服务账号的邮箱(可在下载的JSON密钥里的client_email字段找到)添加进去,赋予「编辑」权限。

二、编写无交互上传脚本

替换原来的OAuth认证逻辑,改用服务账号认证。下面是完整的可运行示例:

首先安装依赖:

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

脚本代码:

import os
import schedule
import time
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

# 配置参数,替换成你自己的内容
SERVICE_ACCOUNT_KEY_PATH = 'service_account_key.json'
TARGET_FOLDER_ID = '你的目标文件夹ID'  # 从Drive文件夹URL获取,比如https://drive.google.com/drive/folders/XXX里的XXX
UPLOAD_FILE_PATH = '/path/to/your/target/file'  # 本地要上传的文件路径
UPLOAD_INTERVAL_HOURS = 24  # 上传间隔,这里设置为每天一次

def upload_to_drive():
    # 加载服务账号密钥并生成认证凭证
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_KEY_PATH,
        scopes=['https://www.googleapis.com/auth/drive.file']
    )

    # 构建Drive服务客户端
    drive_service = build('drive', 'v3', credentials=credentials)

    # 准备上传媒体对象
    file_name = os.path.basename(UPLOAD_FILE_PATH)
    media = MediaFileUpload(UPLOAD_FILE_PATH)

    # 上传文件到指定文件夹
    file_metadata = {
        'name': file_name,
        'parents': [TARGET_FOLDER_ID]
    }

    upload_result = drive_service.files().create(
        body=file_metadata,
        media_body=media,
        fields='id'
    ).execute()

    print(f"文件上传成功,Drive文件ID: {upload_result.get('id')}")

if __name__ == '__main__':
    # 脚本启动时先执行一次上传
    upload_to_drive()

    # 设置定期上传任务
    schedule.every(UPLOAD_INTERVAL_HOURS).hours.do(upload_to_drive)

    # 保持脚本运行以触发定时任务
    while True:
        schedule.run_pending()
        time.sleep(60)

三、关键细节说明

  • 服务账号权限逻辑:服务账号本身有独立的Drive空间,但我们通过共享独立账户的文件夹,让它能将文件直接上传到你的目标账户中——这就是实现“上传至独立账户而非用户个人账户”的核心。
  • 定时任务优化:如果需要长期稳定运行,更推荐用操作系统的定时任务(比如Linux的cron,Windows的「任务计划程序」)来触发脚本,比脚本内的循环更可靠(避免脚本崩溃后停止运行)。
  • 权限最小化:代码中使用的drive.file权限仅允许服务账号访问自己上传的文件或被共享的文件,遵循最小权限原则,比全Drive权限更安全。

四、常见问题排查

  • 若上传失败提示权限不足:检查服务账号邮箱是否被正确添加到目标文件夹的共享列表,且权限设置为「编辑」。
  • 若找不到目标文件夹ID:打开Drive文件夹,URL中folders/后面的字符串就是文件夹ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:22