如何使用Python替换Google Drive中同ID的现有文件
问题原因
你当前使用的POST /upload/drive/v3/files接口是Google Drive API的新建文件接口,按照REST接口设计规则,这个接口永远会生成带全新ID的文件,不可能实现同ID覆盖,和你传什么参数没有关系。
实现同ID覆盖的修改方案
要保留原文件ID替换内容,只需要调整3处配置即可,核心的multipart上传结构不需要改动:
- 将请求方法从
POST改为PATCH,这是Drive API规定的更新现有文件的请求方法 - 在请求URL中追加你要覆盖的目标文件ID,接口路径格式为
/upload/drive/v3/files/{目标文件ID} - 元数据参数
para如果不需要修改文件名、描述等属性,可以直接留空,不需要额外传ID字段
修改后的可运行代码
import json import requests # 替换成你自己的有效鉴权Token headers = {"Authorization": "Bearer 你的实际Token"} # 替换成你要覆盖的目标文件ID TARGET_FILE_ID = "这里填你要保留ID的原有文件的ID" para = { # 如果不需要修改文件名,这行可以删掉,会保留原文件名 "name": "video1.mp4", } files = { 'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'), 'file': open("./video1.mp4", "rb") } r = requests.patch( # 注意URL里拼接了目标文件ID f"https://www.googleapis.com/upload/drive/v3/files/{TARGET_FILE_ID}?uploadType=multipart", headers=headers, files=files ) print(r.text)
可选配置
如果你不希望Drive自动清理旧的修订版本,可以在URL后追加参数keepRevisionForever=true,修改后的URL为:f"https://www.googleapis.com/upload/drive/v3/files/{TARGET_FILE_ID}?uploadType=multipart&keepRevisionForever=true"
注意:使用的鉴权Token必须拥有目标文件的编辑权限,否则接口会返回403权限不足错误。
内容的提问来源于stack exchange,提问作者Gautam Anew
相关产品推荐
相关产品推荐

