从rails中的Google Picker API下载文件

时间:2014-06-17 07:33:02

标签: javascript ruby-on-rails download google-picker

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

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

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

我使用的是rails 3.2版

任何帮助都会非常感激。感谢。

3 个答案:

答案 0 :(得分:3)

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

Authorization: Bearer [token]

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

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

答案 1 :(得分:1)

这就是我的所作所为:

获取我需要从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;
        }
    });

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

答案 2 :(得分:0)

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

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

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

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

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

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

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

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