2

I've used Google Picker API to select a file from user's Google drive. I've all the metadata about the file which is returned by this API. But I'm stuck at how to download this file on my server.

Using the following link to download the file only downloads some files properly while the others are corrupted:

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

I'm using rails version 3.2

Any helps would be much appreciated. Thanks.

4

3 回答 3

5

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

Authorization: Bearer [token]

令牌在哪里gapi.auth.getToken().access_token

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

于 2014-06-20T09:10:40.720 回答
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;
        }
    });

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

于 2014-06-21T13:53:26.370 回答
0

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

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

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

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

这会将授权代码返回给服务器。然后,服务器可以使用范围和身份验证代码(变成请求令牌)来读取文件。

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

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

资料来源:https ://www.rfc-editor.org/rfc/rfc6749 - 第 14 页(客户资料)

于 2015-03-26T23:20:14.887 回答