【问题标题】:Upload to Google Drive without any UI?在没有任何 UI 的情况下上传到 Google Drive?
【发布时间】:2012-09-16 11:38:08
【问题描述】:

我正在寻找将文件上传到 Google Drive 的服务器应用程序。我以前使用的是 Documents List API,但我发现它已被弃用。我想改用 Google Drive API,但这似乎非常受限于使用 web/OAuth 流程。

我需要做的就是将 Word、Excel 文件等上传到 Google 云端硬盘,但我需要以完全自动化的方式执行此操作,无需任何类型的用户界面。我希望编写一个命令行应用程序,它可以在 cron 或其他任何东西上运行,并且不需要通过网络等进行人工干预。

我宁愿放弃 Documents List API,因为我不想在他们最终关闭它时被烧毁,我想使用 Google 不会很快放弃的受支持的 API .这存在吗?

【问题讨论】:

标签: google-drive-api


【解决方案1】:

您的应用程序需要用户的许可才能针对他的文件使用 API。该授权需要使用基于 Web 的 Oauth 进行。该授权的结果是您的服务器应用程序最终会获得一个可以存储的刷新令牌。您的应用可以随时将该刷新令牌转换为访问令牌并访问驱动器文件。

因此,只要您接受需要进行一次性授权,您就可以实现您想要的。

【讨论】:

  • 谢谢你,这对我来说并不理想,因为我们正在谈论使用根本没有图形用户界面的机器软件,但如果是这种情况,我们就在,然后我必须解决它。谢谢。
  • 授权过程和驱动器访问不需要在同一设备上。因此,您可以拥有一个执行授权流程并赢得刷新令牌的 servlet。然后,您可以将该刷新令牌安全地传输到机器上,一切顺利。或者,您可以使用 OAuth 游乐场赢得刷新令牌。见stackoverflow.com/questions/19766912/…
【解决方案2】:

以下是使用 GitHub | gdrive 的 Windows、Linux 和 MacOS 的说明。

$ gdrive list
Go to the url... enter the oauth verification code... OK
$ gdrive upload file
$ gdrive mkdir UploadDir
ID_of_UploadDir
$ gdrive sync upload LocalDir ID_of_UploadDir

【讨论】:

  • 表示应用未通过验证
【解决方案3】:

gdrive 解决方案目前不起作用(登录问题)。所以你现在可以使用rclone。你可以安装它

conda install -c conda-forge rclone

然后按照配置文档https://rclone.org/drive/
配置后,您将能够使用此命令复制到谷歌驱动器(统计标志用于进度条)

rclone copy <filename> remote: --stats-one-line -P --stats 2s

rclone 包含许多后端,因此您不仅可以上传到谷歌驱动器

【讨论】:

  • 在 Linux/macOS/BSD 系统上 iInstall rclone,运行:curl https://rclone.org/install.sh | sudo bash
【解决方案4】:

由于 gdrive tool 不再维护。我找到了一个官方的更好的方法。

使用卷曲。

  1. 安装卷曲

sudo apt install curl

  1. google console 上创建您的项目凭据。如果您没有帐户,请先创建一个帐户。

创建凭据 > 配置 OAth 同意屏幕(如果需要)> 应用程序类型 > 电视和受限输入设备 > 保存您的客户端 ID 和客户端密码。

  1. 验证设备

curl -d "client_id=&lt;client_id&gt;&amp;scope=https://www.googleapis.com/auth/drive.file" https://oauth2.googleapis.com/device/code

预期响应:

{"device_code": "<long string>",
"user_code": "xxx-xxx-xxx",
"expires_in": 1800,
"interval": 5,
"verification_url": "https://www.google.com/device"}

然后转到https://www.google.com/device --> 输入"user_code" --> 赋予相关权限。

  1. 保存"device_code""user_code" 值。
  2. 获取承载码

curl -d client_id=&lt;client id&gt; -d client_secret=&lt;client secret&gt; -d device_code=&lt;device code&gt; -d grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Adevice_code https://accounts.google.com/o/oauth2/token

预期输出:

{
"access_token": ".....",
"expires_in": 3599,
"refresh_token": "....",
"scope": "https://www.googleapis.com/auth/drive.file",
"token_type": "Bearer"
}
  1. 保存"access_token" 值。

  2. 开始上传

curl -X POST -L -H "Authorization: Bearer &lt;enter access_token here&gt;" -F "metadata={name :'filename.zip'};type=application/json;charset=UTF-8" -F "file=@filename.zip;type=application/zip" "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"

注意

在上传之前将您的文件制作成 zip 存档。上面的代码适用于存档文件。我用上面的方法成功上传了10gb的压缩包。

Source

【讨论】:

    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多