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

如何不保存到磁盘就将文件传给Google Drive API的MediaFileUpload

解决方案

你遇到的报错是因为使用的MediaFileUpload仅支持传入本地文件路径、本地文件对象,不支持Flask框架的FileStorage对象或原始字节流,尝试传入字节流时它会错误地尝试用UTF-8解码内容,因此触发编码报错。

无需落盘的实现方案

使用Google API客户端提供的MediaIoBaseUpload类替换MediaFileUpload,前者原生支持二进制类文件对象,可以直接对接Flask返回的FileStorage实例,全程在内存中处理,不需要写入磁盘。

代码实现步骤

  1. 导入对应依赖
from googleapiclient.http import MediaIoBaseUpload
  1. 修改上传逻辑,直接使用Flask获取的文件对象
# 从请求中获取上传文件
uploaded_file = request.files['file']
# 可选:如果之前有调用过read()操作,需要重置文件指针到开头
# uploaded_file.seek(0)

file_metadata = {
    'name': uploaded_file.filename, # 直接使用用户上传的原始文件名
    'parents': [folder_id]
}
# 使用MediaIoBaseUpload接收类文件对象,自动处理二进制流
media = MediaIoBaseUpload(
    uploaded_file,
    mimetype=uploaded_file.mimetype, # 自动识别上传文件的MIME类型,无需硬编码
    resumable=True
)
file = service.files().create(
    body=file_metadata,
    media_body=media,
    fields='id'
).execute()

关键说明

  • 全程没有磁盘IO操作,不会产生临时文件,也不需要后续的文件清理逻辑
  • 直接读取二进制流,不会尝试解码文件内容,不会触发编码报错
  • 自动适配不同类型的上传文件,不需要提前预判文件类型或编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:07