使用Google Drive API下载文件

问题描述 投票:0回答:4

我正在尝试使用Python API从Google云端硬盘下载文件。我正在浏览文档,并且看到一个带两个参数(服务实例和驱动器文件实例)的def。我没有看到anywhere如何创建驱动器文件实例以传递给def。应该怎么做?也许我只是在这里不理解一些简单的东西,这也是一个很好的可能性...

google-drive-api
4个回答
4
投票

我不知道您提到的文档页面,但是,为了下载文件,获取其元数据并向其downloadUrl进行身份验证的请求。

f = service.files().get(fileId=file_id).execute()
resp, content = service._http.request(f.get('downloadUrl'))

2
投票

您可能考虑使用Temboo Python SDK,该SDK包含用于使用Google云端硬盘的简化方法(除100多种其他API外)。看看https://www.temboo.com/library/Library/Google/Drive/Files/Get/

(完全公开:我在Temboo工作。]


2
投票

我同意Burcu的回答:Google云端硬盘的“ get”方法只会返回文件的元数据。如果要检索文件的内容,则应使用Burcu指示的downloadUrl属性下载它。因此:1.获取元数据,2.提取downloadUrl属性,并3.使用http请求下载。

关于您的问题,“要传递给def的驱动器文件实例”实际上是根据凭据构建的,因此,例如:

 /**
 * Returns the credentials of the user in the session. If user is not in the
 * session, returns null.
 * @param req   Request object.
 * @param resp  Response object.
 * @return      Credential object of the user in session or null.
 */
protected Credential getCredential(HttpServletRequest req,
    HttpServletResponse resp) {
  String userId = (String) req.getSession().getAttribute(KEY_SESSION_USERID);
  if (userId != null) {
    return credentialManager.get(userId);
  }
  return null;
};

/**
 * Build and return a Drive service object based on given request parameters.
 * @param credential User credentials.
 * @return Drive service object that is ready to make requests, or null if
 *         there was a problem.
 */
protected Drive getDriveService(Credential credential) {
  return new Drive.Builder(TRANSPORT, JSON_FACTORY, credential).build();
}

有关完整的解释,您可以参考:https://developers.google.com/drive/web/examples/java#putting_together_the_pieces_getting_a_complete_set_of_credentials_for_every_request


0
投票

[我也在Drive API方面苦苦挣扎,但随后我开始研究他们在Quickstart guide中提供的方向,并编写了一个脚本来从Google Drive下载文件。

如果使用的是python,可能会很有用https://gist.github.com/lelogrott/84102f9e4d655bd92a45ab024a13bc90

您可能需要更改一些内容(例如,正在加载的凭据文件的路径),但仍然应该有所帮助。

让我知道您是否还有其他问题

© www.soinside.com 2019 - 2024. All rights reserved.