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

如何用Python的GDrive API从URL直传文件至谷歌云盘(无需本地存储)

问题解决:PyDrive上传内存中图片数据报错TypeError

错误原因

SetContentFile()方法的设计是接收本地文件路径字符串,而非BytesIO对象,直接传入BytesIO会触发类型不匹配错误。

解决方案

使用PyDrive提供的SetContentBytes()方法直接上传字节数据,无需借助本地文件或额外的BytesIO中转(若需对数据流做预处理,也可基于BytesIO读取字节后传入)。同时清理原代码中冗余的请求与重复导入。

修正后的完整代码

import requests
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

# 认证并创建PyDrive客户端
gauth = GoogleAuth()
drive = GoogleDrive(gauth)

# 目标云端硬盘文件夹ID
folder_id = "1GUUQO5huBXFQfsx_on7DdDDmkHnrZIsd"
# 待抓取的图片URL
url = "替换为你的图片URL"
# 请求头(携带API授权信息)
headers = {"Authorization": os.getenv("API")}

# 获取图片字节数据
response = requests.get(url, headers=headers)

if response.status_code == 200:
    filename = 'hello2.jpg'
    # 创建云端文件对象
    file = drive.CreateFile({
        'title': filename,
        'parents': [{'id': folder_id}]
    })
    # 直接传入图片字节数据完成上传
    file.SetContentBytes(response.content)
    file.Upload()
    print(f'图片 {filename} 已成功上传至Google Drive。')
else:
    print(f"获取图片失败,状态码:{response.status_code}")

补充说明

如果需要对数据流做额外处理(如修改图片内容),可借助BytesIO读取字节后传入:

from io import BytesIO

with BytesIO(response.content) as fp:
    # 这里可添加数据流处理逻辑
    fp.seek(0)
    file.SetContentBytes(fp.read())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:15:16