从rails中的Google Picker API下载文件

Download file from Google Picker API in rails

本文关键字:API 下载 文件 Picker Google rails 中的      更新时间:2023-09-26

我使用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定义在: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"下载并保存文件到我的服务器上。

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

在客户端打开文件选择器之前,我们可以让服务器为文件发出身份验证url。给用户读取作用域。

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

然后客户端打开该文件。读取作用域url以获得第二次身份验证,这可能会显示一个接受/拒绝按钮,或者如果作用域已经被授予,则会显示一个无声的弹出框。

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

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

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

来源:https://www.rfc-editor.org/rfc/rfc6749 - page 14(客户配置文件)