【问题标题】:Google Drive Setting mime types properly in PythonGoogle Drive 在 Python 中正确设置 mime 类型
【发布时间】: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


【解决方案1】:

binary/octet-stream 实际上不是有效的 mimetype,我相信。你确定你不是在找application/octet-stream

This Python script for Google Drive uploading 似乎也在使用它。

【讨论】:

  • 啊,是的,感谢您为我指明了正确的方向!我刚刚尝试了类似于您链接的脚本的东西,它就像一个魅力。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2014-01-18
  • 2021-04-24
  • 2012-12-07
  • 2015-05-19
  • 2013-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多