从rails中的Google Picker API下载文件

我已经使用Google Picker API从用户的Google云端硬盘中选择了一个文件。 我有关于此API返回的文件的所有元数据。 但我坚持如何在我的服务器上下载此文件。

使用以下链接下载文件只能正确下载一些文件而其他文件已损坏:

"https://drive.google.com/uc?export=download&id="+fileid 

我正在使用rails 3.2版

任何帮助将不胜感激。 谢谢。

您需要使用GET请求发送标头:

 Authorization: Bearer [token] 

令牌是gapi.auth.getToken().access_token

gapi.load('auth', {'callback': onAuthApiLoad});定义于: gapi.load('auth', {'callback': onAuthApiLoad});

这是我做的:

获取我需要从Picker API下载的文件的文件ID,然后将此文件ID传递给google客户端api以获取文档的直接下载URL:

  gapi.client.request({ 'path': '/drive/v2/files/'+file_id 'method': 'GET' callback: function (responsejs, responsetxt){ var downloadUrl = responsejs.downloadUrl; } }); 

获得此直接下载URL后,我使用rails中的“open-uri”下载并将文件保存在我的服务器上。

我想出了另一种方法。 我们必须将其视为两个单独的身份validation。

在客户端打开文件选择器之前,我们可以让服务器向用户发出file.read范围的身份validationURL。

在用户选择并选择文件之后,客户端将file_id发送到服务器并将其存储在DB中,并将状态作为密钥。

然后,客户端打开file.read范围的URL以再次进行身份validation,这可能会显示“接受/拒绝”按钮,或者如果已经授予范围,则会显示静默弹出窗口。

这将获得授权代码回服务器。 然后,服务器可以使用范围和身份validation代码(转换为请求令牌)来读取文件。

此特定方案涉及基于用户代理的应用程序和Web应用程序客户端配置文件。 因此,这更像是两个完全独立的身份validation流程,而不是标准的3腿身份validation。 其中一个是隐式(双腿),另一个是3腿(auth-code)。 这种混合在一起的交互并不是oauth2.0专门设计的…因此为什么没有记录……

换句话说,每个认证流程可以授权一个且只有一个“客户端”,而“客户端”我们指的是代表资源所有者的应用程序发出请求,这里是JS文件选择器和服务器。

资料来源: https : //tools.ietf.org/html/rfc6749 – 第14页(客户资料)

Interesting Posts