2013-04-16 185 views
0

我试图使用Python API从Google Drive下载文件。我正在浏览文档,我看到一个def需要两个参数,服务实例和Drive File实例。我没有看到任何地方如何创建一个Drive File实例传递给def。这应该怎么做?也许我只是在这里没有理解简单的东西,这是一个很好的可能性...使用Google Drive API下载文件

回答

4

我不知道你提到了文档页面,但是,为了下载一个文件,获取其元数据并作出对其downloadUrl的认证请求。

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

以下是我参考的内容:https://developers.google.com/drive/v2/reference/files/get。你会看到一个名为download_file的def,它有两个参数。 – user165222

+0

'drive_file = service.files()。get(fileId = file_id).execute()',希望有帮助。文档有点奇怪,我们应该修复它。谢谢。 –

2

我同意Burcu的回答:Google Drive“get”方法将只返回文件的元数据。如果您希望检索文件的内容,那么您应该使用它的downloadUrl属性下载它,如Burcu所示。因此:1.获取元数据,2.提取downloadUrl属性,以及3.使用http请求下载。

至于你的问题,在“Drive文件实例传递给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

相关问题