NodeJS:从用户 Google Drive 下载文件

Posted

技术标签:

【中文标题】NodeJS:从用户 Google Drive 下载文件【英文标题】:NodeJS: Download file from users Google Drive 【发布时间】:2021-10-24 07:12:29 【问题描述】:

嗨,

这可能比实际更理论,但我迷路了,我无法想象我是唯一的。

我尝试实现的是从现在到每天结束时从用户的 Google Drive 下载文件(在这种情况下为 XLXS),无需重新验证。

我在积分方面做了什么:

按照教程编写代码(现在应该不需要代码本身) 作为用户,我在 Google Cloud Platform 上创建了一个新项目 作为用户,我要求提供 Drive API 密钥 我有两个访问权限,分别访问一个服务帐户和 OAuth 客户端,并且正在使用 OAuth

软件的其中一个部分是一个 JSON 文件,其中包含我填写的凭据(credentials.json)

当我第一次运行它时,Google API 在控制台中告诉我:

Authorize this app by visiting this url: https://accounts.google.com/o/oauth2/ ...

Enter the code from that page here:

当我在用户登录时在浏览器中打开 URL 时,我必须授予用户对项目应用程序的访问权限,完成后我会得到一个密钥。当我输入终端的密钥时,会生成一个新的 json 文件 - token.js 瞧,一切正常。

文件下载完毕。

但这就是乐趣的开始: 几天后我的令牌过期了,我收到一个错误:

error: 'invalid_grant',
error_description: 'Token has been expired or revoked.'

所以我必须删除token.json,并按照上面提到的步骤创建一个新的。 (URL、授权、复制粘贴密钥、生成令牌)。

但这就是问题所在 - 我必须手动执行此操作,因为我必须授予权限,并且我必须将密钥复制到控制台中。

这就是问题所在 - 我不知道如何解决这个问题。关于这个问题,我已经阅读了一半的互联网,但我发现最好的是它,因为被授予权限的“项目应用程序”没有被释放,它处于测试阶段,这就是为什么权限只持续几天。多哈。我尝试将应用程序投入生产,但它需要我提供大量需要完成的项目列表,然后我才能这样做......我仍然觉得这有点矫枉过正......我不希望应用程序公开或什么不是……

我错过了什么吗?是否有一种简单的方法可以通过 NODE.JS 从 Google Drive 访问自己的文件并保存它们?就像使用 API 密钥一样简单 - 从现在开始到结束时间都完成了吗?

谢谢

奥利弗

【问题讨论】:

【参考方案1】:

您应该对服务器端应用程序使用身份验证流程。当访问令牌过期时,您应该使用返回的refresh token 来获取新的access token

见Refreshing an access token (offline access)。


来自上述文档:

要刷新访问令牌,您的应用会向 Google 的授权服务器 (https://oauth2.googleapis.com/token) 发送一个 HTTPS POST 请求,其中包含以下参数:

client_id -> The client ID obtained from the API Console.
client_secret -> The client secret obtained from the API Console.
grant_type -> As defined in the OAuth 2.0 specification, this field's value must be set to refresh_token.
refresh_token -> The refresh token returned from the authorization code exchange.

特别注意“grant_type”,因为它必须设置为“refresh_token”。

【讨论】:

以上是关于NodeJS:从用户 Google Drive 下载文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST api 从 Google Drive 下载图片

从 URL 列表中获取文件名 - Google Drive

Google Drive 范围 drive.file 不足以将应用拥有的文件复制到应用用户的 Google Drive

使用 Android Studio 中的 Google Drive API 从驱动器下载文件以上传到另一个驱动器

在google drive使用google.colab云服务

通过 Google Drive API 从本地 CSV 文件创建 Google Drive 电子表格