【问题标题】:upload zip file to google drive using curl使用 curl 将 zip 文件上传到谷歌驱动器
【发布时间】:2017-08-25 09:48:43
【问题描述】:

我正在尝试使用 curl 将 zip 文件上传到 Google 云端硬盘帐户。

文件已成功上传,但文件名未更新。它使用默认文件名上传,即“Untitled”。

我正在使用以下命令。

curl -k -H "Authorization: Bearer cat /tmp/token.txt" -F "metadata={name : 'backup.zip'} --data-binary "@backup.zip" https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart

【问题讨论】:

  • 你需要只使用 curl 吗?如果没有,您可以使用“gdrive”命令 (olivermarshall.net/…)
  • 我在没有空间安装 gdrive 的路由器上运行它。因此使我的自定义脚本可以做到这一点
  • 看看这个论坛的评论:gist.github.com/deanet/3427090#gistcomment-1253229。也许你需要根据这篇文章设置一些变量。
  • 感谢您的回复,但我试过了,看起来 Google Drive 已经改变了它处理从命令行上传的方式。您提到的帖子是 5 年前创建的。

标签: shell curl upload google-drive-api


【解决方案1】:

您可以使用Drive API v3 上传压缩文件。修改后的curl代码如下。

curl -X POST -L \
    -H "Authorization: Bearer `cat /tmp/token.txt`" \
    -F "metadata={name : 'backup.zip'};type=application/json;charset=UTF-8" \
    -F "file=@backup.zip;type=application/zip" \
    "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart"

为了使用它,请在范围内包含https://www.googleapis.com/auth/drive

【讨论】:

  • 非常感谢Ton Tanaike!!! You Rock.. 顺便说一句,V2 也使用相同的代码
  • @nbuser 欢迎。也谢谢你。
  • 您能否评论一下如何使用上述相同的代码将文件上传到特定文件夹中。谢谢。
  • @nbuser 请包括parents: ['### folder id ###']metadata
  • 感谢您这么快的回复。通过添加以下代码父母解决了问题:[{kind:'drive#parentReference',id:'folderid'}]}
【解决方案2】:

上面的答案很好用,是我使用 Curl 将文件上传到 Google Drive 时使用的命令。但是,我不明白范围是什么以及使该命令正常工作所需的所有初始设置。因此,出于文档目的。我会给出第二个答案。

在撰写本文时有效...

访问Credentials page 并创建一个新凭据(假设您已经创建了一个项目)。我为电视和受限设备创建了凭据,因此工作流程类似于:

创建凭据 > OAuth 客户端 ID > 应用程序类型 > 电视和受限输入设备 > 命名客户端 > 单击创建。

执行此操作后,我可以在查看新创建的凭据时复制客户端 ID 和客户端密码。

注意:只应替换 Curl 命令中带有双星号的变量。

下一步是运行 Curl 命令:

curl -d "client_id=**client_id**&scope=**scope**" https://oauth2.googleapis.com/device/code
在这种情况下,

Scope 可以被认为是您打算使用具有输入 client_id 的凭据进行的访问。有关范围的更多信息来自the docs 对于重点用例,即上传文件,选择的范围是https://www.googleapis.com/auth/drive.file

在运行上面的 curl 命令时,你会得到类似的响应:

{ "device_code": "XXXXXXXXXXXXX", "user_code": "ABCD-EFGH",
“expires_in”:1800,“间隔”:5,“verification_url”: “https://www.google.com/device”}

下一步是在浏览器的响应中访问 verification_url,提供 user_code 并接受权限请求。遵循所有提示后,您将看到一个代码,其余步骤不需要此代码(但可能有一些理由将其用于其他用例)。

下一步是使用 Curl 命令:

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": "XXXXXXXXX", "expires_in": 3599,
“refresh_token”:“XXXXXXXXX”,“范围”: “https://www.googleapis.com/auth/drive.file”,“token_type”:“承载者” }

现在您可以使用访问令牌并使用类似于以下的 Curl 命令遵循接受的答案:

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

【讨论】:

  • 感谢您提供详细的分步回答。对于像我这样愚蠢的聪明人来说,这是救命稻草!
  • 电视和有限设备的客户端 ID/秘密仅适用于该类型的客户。卷曲到 oauth2.googleapis.com/device/code 返回:invalid_client 仅类型为 \u0026#39;TV 和受限输入设备\u0026#39 的客户端;可以将 OAuth 2.0 流用于电视和有限输入设备应用程序。请创建并使用合适的客户端。
猜你喜欢
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
相关资源
最近更新 更多