dym*_*yma 1 python mime-types imagedownload google-drive-api
摘要
尝试使用 files.export 下载 JPEG 文件,但收到错误 403 消息:“导出仅支持文档编辑器文件。”
描述
我正在尝试将 Google Drive API 用于我的一个项目,这实际上就是收集一些图片,将它们存储在 Drive 上,然后将它们加载回来进行一些处理。很直接。
就此而言,我只是遵循API 文档和其中提供的示例代码片段。现在,我可以将图片上传到存储中。尝试下载它时,我遇到了以下错误消息:
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.">
Run Code Online (Sandbox Code Playgroud)
用于上传图片的代码如下所示:
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()
Run Code Online (Sandbox Code Playgroud)
上传成功,我取回文件ID:
print(file)
{'id': '1aBoMvaHauCRyZOerNFfwM8yQ78RkJkDQ'}
Run Code Online (Sandbox Code Playgroud)
我可以在我的 Google Drive 上看到它。
然后我尝试访问相同的文件:
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))
Run Code Online (Sandbox Code Playgroud)
此时发生错误。我看到网站上的 API Explorer 返回相同的错误,这就是为什么我很想得出结论,我的代码不是罪魁祸首。这file.export只有两个输入,我看不出我究竟是如何未能正确使用它。我查看了类似的问题,但其中大多数涉及下载文本文档,我的错误消息告诉我这与文档类型有关。我用错了mimeType吗?
官方页面上的错误处理建议不包含此特定错误消息。
你有什么建议吗?
从 的错误提示来看Export only supports Docs Editors files.,为了下载除Google Workspace 文档(Document、Spreadsheet、Slides 等)以外的文件,很遗憾,无法使用“文件:导出”的方法。在您的情况下,当您要下载图像文件时,请使用“文件:获取”的方法。当你的脚本被修改时,它变成如下。
request = GoogleDrive.files().export_media(fileId=file.get('id'), mimeType="image/jpeg")
Run Code Online (Sandbox Code Playgroud)
request = GoogleDrive.files().get_media(fileId=file.get('id'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2043 次 |
| 最近记录: |