【问题标题】:Download file from Google Picker API in rails从 Rails 中的 Google Picker API 下载文件
【发布时间】:2014-06-17 07:33:02
【问题描述】:

我使用Google Picker API 从用户的 Google 驱动器中选择一个文件。我有关于这个 API 返回的文件的所有元数据。但我被困在如何在我的服务器上下载这个文件。

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

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

我正在使用 rails 3.2 版

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

【问题讨论】:

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


    【解决方案1】:

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

    Authorization: Bearer [token]
    

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

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

    【讨论】:

    • 感谢您的帮助安迪吉
    • 那么,这是否意味着我必须将身份验证令牌从客户端传递到服务器?这是一个好习惯吗?
    • @sam 好吧,如果没有 SSL,我不会这样做,但我认为它或其他方式没有任何问题。如果您找到替代方案,请告诉我。
    【解决方案2】:

    这就是我所做的:

    从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”下载文件并保存在我的服务器上。

    【讨论】:

      【解决方案3】:

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

      在客户端打开文件选择器之前,我们可以让服务器向用户发出一个 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 页(客户资料)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-08
        • 2022-06-28
        • 1970-01-01
        相关资源
        最近更新 更多