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”下载文件,可以参考上面的官方文档。
总结
尝试使用 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”下载文件,可以参考上面的官方文档。