我正在寻找编写一个服务器应用程序来将文件上传到Google Drive。我以前使用过文档列表 API,但我发现它已被弃用。我想转向 Google Drive API,但这似乎仅限于使用 Web/OAuth 流程。
我需要做的就是将 Word、Excel 文件等上传到 Google Drive,但我需要以完全自动化的方式完成此操作,没有任何类型的用户界面。我希望编写一个命令行应用程序,它可以在 cron 或其他任何东西上运行,并且不需要通过网络等进行人工干预。
我宁愿放弃文档列表 API,因为我不想在他们最终关闭它时被烧伤,我想使用受支持的 API,Google 不会很快摆脱它。这个存在吗?
您的应用程序需要用户的许可才能针对其文件使用 API。该授权需要使用基于 Web 的 Oauth 进行。该授权的结果是您的服务器应用程序最终会获得一个可以存储的刷新令牌。您的应用程序可以随时将该刷新令牌转换为访问令牌并访问驱动器文件。
因此,只要您接受需要进行一次性授权,您就可以实现您想要的目标。
由于gdrive工具不再维护。我找到了一个官方的更好的方法。
使用卷曲。
sudo apt install curl
创建凭据 > 配置 OAth 同意屏幕(如果需要)> 应用程序类型 > 电视和有限输入设备 > 保存您的客户端 ID 和客户端密钥。
curl -d "client_id=<client_id>&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"
--> 给予相关权限。
"device_code"
和 "user_code"
值。curl -d client_id=<client id> -d client_secret=<client secret> -d device_code=<device code> -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"
}
保存
"access_token"
值。
开始上传
curl -X POST -L -H "Authorization: Bearer <enter access_token here>" -F "metadata={name :'filename.zip'};type=application/json;charset=UTF-8" -F "[email protected];type=application/zip" "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"
注意
上传前将文件制作为 zip 存档。上面的代码适用于存档文件。我用上面的方法成功上传了10gb的压缩包。
gdrive
解决方案目前无法正常工作(登录问题)。所以您现在可以使用rclone
。你可以安装它
conda install -c conda-forge rclone
然后按照配置文档进行操作https://rclone.org/drive/
配置完成后,您将能够使用此命令复制到谷歌驱动器(统计标志用于进度条)
rclone copy <filename> remote: --stats-one-line -P --stats 2s
rclone 包含许多后端,因此您不仅可以上传到谷歌驱动器
以下是使用 GitHub | 适用于 Windows、Linux 和 MacOS 的说明gdrive.
$ 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
更新 2024 年。工作解决方案。
为了节省其他人的时间,上面的一些链接是旧的。
当前维护的
gdrive
版本可以在这里找到:
https://github.com/glotlabs/gdrive?tab=readme-ov-file
提供一些有关如何设置项目、获取 OAuth 和使用 CLI 的有用说明。