使用 cURL 上传到 google 驱动器并设置名称和位置

Upload to google drive using cURL and set name and location

我正在尝试使用 cURL 将文件上传到 Google 驱动器。文件已上传,但仅在根目录中并且始终命名为 "Untitled".

我的基本脚本如下所示:

curl 
    --silent 
    --request POST 
    --data-binary "@c:\temp\myfile.jpg"         
    -H "Authorization: Bearer abcdefg" 
    -H "Content-Type: image/jpeg
    "https://www.googleapis.com/upload/drive/v2/files?uploadType=media" 

使用这些 link 作为参考:

Upload file to Drive and set file name

https://gist.github.com/deanet/3427090

https://developers.google.com/drive/web/manage-uploads

我注意到这可能是必需的,它在 Google 的文档中定义(参见 link)

-H "Slug: myfile3.jpg" 

但这不管我放不放都没有影响

使用 cURL 帮助,我注意到这可能会有帮助:

 -OL MyFolder\myfile2.jpeg

...但这也没有效果。

我还注意到可能需要字符串 {title:file title},但我不知道如何使用 cURL 将其嵌入。基于上面的 links,我认为我可以将它附加在 headers 之一的末尾,就在 body 之前。所以,我想变聪明,将 content-type 规范更改为:

-H "Content-Type: image/jpeg {"title":"myfile4"}" 

...但是也没有效果

奇怪的是,Google自己的文档是不正确的,所以,我怀疑他们曾经使用的方法现在已经过时了。 link 中的授权规范有误。您必须使用 Bearer 令牌,而不是 "GoogleLogin"。我提到了这个 link:

https://developers.google.com/gdata/articles/using_cURL

我的整个脚本是这样的。它上传了,但是,不是我想要的,也没有按照我想要的方式命名。

curl 
    --silent 
    --request POST 
    --data-binary "@c:\temp\myfile.jpg"         
    -OL MyFolder\myfile2.jpeg
    -H "Slug: myfile3.jpg" 
    -H "Authorization: Bearer abcdefg" 
    -H "Content-Type: image/jpeg {"title":"myfile4"}" 
    "https://www.googleapis.com/upload/drive/v2/files?uploadType=media" 

我意识到我在一个地方指定了 "myfile2.jpg",在另一个地方指定了 "myfile3.jpg",在另一个地方指定了 "myfile4"。无论是匹配还是指定都没有区别。

任何帮助将不胜感激!

您的问题是您正在处理没有元数据的媒体内容。你有两条前进的道路:-

  1. POST 用于创建空文件并捕获其文件 ID 的元数据。然后使用文件 ID 进行内容上传
  2. 创建一个包含元数据和内容的多部分 MIME 正文 POST

就我个人而言,我会选择选项 1,因为它将两个问题分开,但两者同样有效。这些选项在 https://developers.google.com/drive/web/manage-uploads

中进行了描述