【问题标题】:Google Picker and download the selected fileGoogle Picker 并下载所选文件
【发布时间】:2017-08-22 16:31:22
【问题描述】:

我已经成功集成了 google Picker。现在我有了 FileId 和 access_token。我需要在 Python 的后端下载选定的文件。 我已经关注了谷歌开发人员的文档,但是如果我使用 python 库,那么我必须再次对用户进行身份验证,这不适合我的情况。 如果我可以下载任何格式的文件,请赐教。

提前致谢。

【问题讨论】:

  • 您想从 Google Drive 下载什么 mimeType?如果要下载任何格式的Google Docs,可以查看developers.google.com/drive/v3/web/…的信息,对于Google Docs以外的文件,基本上可以下载原格式。然后,您已经拥有访问令牌。因此,您可以使用它和requests 下载文件。如果我误解了你的问题,我很抱歉。
  • 感谢@Tanaike 的信息我想下载用户选择的图像和视频。我尝试了GET https://www.googleapis.com/drive/v3/files/0B9jNhSvVjoIVM3dKcGRKRmVIOVU?alt=media Authorization: Bearer <ACCESS_TOKEN>,但它提供了文件数据。我没有文件的扩展名。那么有什么方法可以通过带有文件ID的请求下载所选文件。我不想使用谷歌 python 库。请提出建议。

标签: python google-drive-api google-picker


【解决方案1】:

这是一个非常简单的示例脚本,用于在不使用 Google 库的情况下使用访问令牌和文件 ID 下载文件。正如您所说,此示例假定除了 Google Docs 之外的文件(图像和视频)。流程如下。

流程:

  1. 检索文件名和 mimeType。
  2. 从检索到的文件名和 mimeType 创建文件名。如果文件名在 Google Drive 上没有扩展名,则此脚本使用 mimeType 将扩展名添加到文件名并保存。如果文件名具有 Google Drive 上的扩展名,则此脚本将使用原始文件名并保存。
  3. 下载文件并将其保存为创建的文件名。如果要将文件保存到特定目录,请自行设置。

示例脚本:

import mimetypes
import os.path
import requests
accessToken = "### access token ###"
fileId = "### file id ###"
fileInf = requests.get(
    "https://www.googleapis.com/drive/v3/files/" + fileId,
    headers={"Authorization": "Bearer " + accessToken},
)
filename = fileInf.json()["name"]
temp, ext = os.path.splitext(filename)
filename = filename if ext != "" else filename + mimetypes.guess_extension(fileInf.json()["mimeType"])
r = requests.get(
    "https://www.googleapis.com/drive/v3/files/" + fileId + "?alt=media",
    headers={"Authorization": "Bearer " + accessToken},
)
with open(filename, "wb") as f:
    f.write(r.content)

如果这对您没有帮助,我很抱歉。

【讨论】:

  • 感谢@Tanaike 的脚本。我认为我的accessToken 无效。此 accessToken 来自谷歌选择器。 fileInf 返回带有 {'location': 'Authorization', 'message': 'Invalid Credentials', 'domain': 'global', 'reason': 'authError', 'locationType': 'header'}401 标头。如果这不正确,请建议我在哪里可以获得访问令牌?
  • @susheel 欢迎。也谢谢你。如果您的问题得到解决,请按接受按钮。其他人也可以确认这个解决方案。 stackoverflow.com/help/accepted-answer
  • @Tanaike 是否可以将您的脚本转换为使用 google drive api python 库('google-api-python-client')?
  • @Anthony Kong 你能把它作为一个新问题提交吗?
  • @Tanaike 绝对!只是想先和你确认一下是否可行
猜你喜欢
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多