【发布时间】:2015-03-05 05:20:41
【问题描述】:
我正在构建一个用于将文件上传到 Google Drive 的命令行 Python 脚本。 我的目标是上传任何文件,无论文件类型如何。
根据文档,当我上传文件时(无论我是使用媒体上传还是简单上传),如果我将 mime_type 设置为 None,Google Drive 应自动相应地设置 mime 类型。它适用于大多数文件类型。这是我如何上传文件的简化示例:
def upload(service, title, parent_id, mime_type, filename):
media_body = MediaFileUpload(filename, mimetype=mime_type, resumable=True)
body={
'title': title,
'mimeType': None
}
body['parents'] = [{'id': parentID}]
try:
service.files().insert(body=body,media_body=media_body).execute()
except apiclient.errors.HttpError, e:
#catch the error
问题是当文件是可执行文件、数据库或其他应用程序支持文件时,Google 驱动器似乎无法正确设置 mime_type 并抛出错误:“HttpError 400”Media type 'None'不支持。有效的媒体类型:[ * / *]"
我发现 400 错误,然后尝试使用 mime_type "binary/octet-stream" 上传文件,这似乎至少让请求通过。但是当文件上传时,它的大小是 0 字节,即文件被创建但没有内容被上传。
我还尝试根据 Python 的内置“mimetypes.guess_type(url)”函数设置 mime_type,但即使具有这种特殊性,它似乎也无法正常工作。
谁能帮我指出如何设置 mime_type 以便无论文件类型如何都能正确上传?提前致谢!
【问题讨论】:
-
Ryan 在下面的回答帮助我指出了正确的方向。但也值得注意的是,我发现简单上传不适用于可执行/源/应用程序支持文件。您只能对这些类型的文件使用媒体上传,无论它们是否很小……不幸的是,这给我的应用程序增加了相当多的 http 开销,因为无法批量上传媒体……哦,好吧。
标签: python file-upload google-drive-api mime-types