Google Drive API v2上传文件名称变为无标题问题排查求助
我之前也碰到过类似的糟心事,先帮你梳理下核心排查方向,你可以逐个验证:
首先看你贴的代码,这里有个关键细节——你在调用files().insert()时加了convert=True和ocr=True两个参数,这大概率是导致文件名丢失的主要原因!
具体排查点:
convert=True的强制转换干扰
当这个参数设为True时,Google Drive会自动把上传的文件转换成对应的Google原生格式(比如把本地docx转成Google Docs、PDF转成Google文档)。在这个转换过程中,Drive经常会忽略你传入的自定义文件名,直接生成“Untitled”的新文档。如果你的需求只是上传原文件而不需要转换格式,直接把这个参数删掉或者设为False就好。ocr=True的OCR生成逻辑问题
这个参数是用来开启光学字符识别的,针对图片或扫描件生成可编辑文档。和格式转换一样,开启OCR后生成的新文档也会默认使用“Untitled”作为文件名,不会继承你指定的名称。如果你的文件不需要OCR处理,建议关闭这个参数。确认
filename变量的有效性
有时候可能是传入的filename变量本身出了问题——比如被意外清空、传错了值。你可以在函数开头加一行打印验证:print("当前要设置的文件名:", filename)运行后看看输出是不是你期望的原文件名,排除变量赋值错误的可能。
权限问题的排查(可能性较低)
你用的https://www.googleapis.com/auth/drive是全读写权限,权限本身应该没问题。不过可以确认下上传后的文件是不是在你预期的文件夹里,有没有因为目标文件夹的特殊权限设置(比如团队盘的限制)导致文件名被重置,但这种情况很少见,优先排查前面的参数问题。
修改后的代码示例(保留原文件名的基础版本):
如果不需要转换和OCR,你可以把代码改成这样:
def uploadFile(filename, filepath, mimetype): file_metadata = {'name': filename} media = MediaFileUpload(filepath, mimetype=mimetype) # 移除convert和ocr参数,避免自动转换重置文件名 file = drive_service.files().insert(body=file_metadata, media_body=media).execute() print('File ID: %s' % file.get('id')) return file.get('id')
如果确实需要转换格式或OCR功能,那可以在上传完成后,再调用files().update()方法手动修改文件名:
# 上传后更新文件名的辅助函数 def updateFileName(file_id, new_name): file_metadata = {'name': new_name} updated_file = drive_service.files().update( fileId=file_id, body=file_metadata ).execute() return updated_file
内容的提问来源于stack exchange,提问作者aryan singh

