Google Drive API v3 files.export method throws a 403 error: "Export only supports Docs Editors files."

Google Drive API v3 files.export method throws a 403 error: "Export only supports Docs Editors files."

总结
尝试使用 files.export 下载 JPEG 文件,但收到错误 403 消息:“导出仅支持文档编辑器文件。”

描述
我正在尝试将 Google Drive API 用于我的一个项目,这实际上就是收集一些图片,将它们存储在 Drive 上,然后将它们加载回去进行一些处理。非常简单。
就此而言,我只是遵循 API Documentation 和其中提供的示例代码片段。现在,我可以将图片上传到存储中。尝试下载它时,我 运行 进入此错误消息:

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/drive/v3/files/1D1XpQwrCvOSEy_vlaRQMEGLQJK-AeeZ7/export?mimeType=image%2Fjpeg&alt=media returned "Export only supports Docs Editors files.". Details: "Export only supports Docs Editors files.">

用于上传图片的代码如下所示:

 import io
 from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload

# GoogleDrive is a service created with googleapiclient.discovery.build

# upload a picture
file_metadata = {'name': 'example_on_drive.jpg'}
media = MediaFileUpload('example_upload.jpg', mimetype='image/jpeg')
file = GoogleDrive.files().create(
    body=file_metadata,
    media_body=media,
    fields='id').execute()

上传成功,取回文件ID:

print(file) 
{'id': '1aBoMvaHauCRyZOerNFfwM8yQ78RkJkDQ'}

我可以在我的 Google 驱动器上看到它。
然后我尝试访问同一个文件:

request = GoogleDrive.files().export_media(fileId=file.get('id'), mimeType="image/jpeg")
fh = io.BytesIO()
downloader = MediaIoBaseDownload(fh, request)
done = False
while done is False:
    status, done = downloader.next_chunk()
    print("Download %d%%" % int(status.progress() * 100))

此时错误发生。我在 return 网站上看到 API 资源管理器同样的错误,这就是为什么我很想得出结论,我的代码不应该受到指责。这个 file.export 只有两个输入,我不明白我到底是怎么没能正确使用它。我查看了类似的问题,但其中大部分都涉及下载文本文档,我的错误消息告诉我它与文档类型有关。我是不是用错了mimeType

官方页面上的

Error handling suggestions 不包含此特定错误消息。

你有什么建议吗?

Export only supports Docs Editors files.的错误信息来看,为了下载除Google工作区文档(Document、Spreadsheet、Slides等)之外的文件,不幸的是,“文件:导出”不能使用。在您的情况下,当您要下载图像文件时,请使用“Files: get”的方法。当你的脚本修改后,变成如下。

发件人:

request = GoogleDrive.files().export_media(fileId=file.get('id'), mimeType="image/jpeg")

收件人:

request = GoogleDrive.files().get_media(fileId=file.get('id'))

参考:

  • Download files
    • 关于使用“export”和“get”下载文件,可以参考上面的官​​方文档。