使用 curl 将缩略图上传到 Youtube API

Upload thumbnail to Youtube API using curl

我在 YouTube API v3 中使用 curl 来创建广播、修改视频标题等,没有任何问题。我的问题是当我尝试使用 Google.

中的 the docs 向视频添加缩略图时

这是我的示例,出于安全原因更改了密钥:

curl --request POST -v \
  "https://youtube.googleapis.com/youtube/v3/thumbnails/set\
?videoId=RoZypUhZY04\
&uploadType=media\
&key=mykey" \
  --header 'Authorization: Bearer my_access_token' \
  --header 'Content-Type: image/jpeg'\
  -F 'file=@/Users/adviner/Projects/Prototypes/VendorAPI/source/YouTube/YouTube-BOS.jpg'\
  -F 'filename=YouTube-BOS.jpg'

我试过:

-F 'image=@/Users/adviner/Projects/Prototypes/VendorAPI/source/YouTube/YouTube-BOS.jpg'\

在文档中它说使用以下 URL 到 POST 图像:

https://www.googleapis.com/upload/youtube/v3/thumbnails/set

但是当您查看示例时它说要使用:

https://youtube.googleapis.com/youtube/v3/thumbnails/set

我都试过了,似乎图像已正确上传,但出现以下错误:

第一个URL:https://www.googleapis.com/upload/youtube/v3/thumbnails/set

{
  "error": {
    "code": 400,
    "message": "Media type 'image/jpeg; boundary=------------------------136ebfc0c8146cb8' is not supported. ",
    "errors": [
      {
        "message": "Media type 'image/jpeg; boundary=------------------------136ebfc0c8146cb8' is not supported. ",
        "domain": "global",
        "reason": "badRequest"
      }
    ],
    "status": "INVALID_ARGUMENT"
  }
}

使用URL时:https://youtube.googleapis.com/youtube/v3/thumbnails/set

{
  "error": {
    "code": 400,
    "message": "The request does not include the image content.",
    "errors": [
      {
        "message": "The request does not include the image content.",
        "domain": "youtube.thumbnail",
        "reason": "mediaBodyRequired",
        "location": "body",
        "locationType": "other"
      }
    ]
  }
}

关于我遗漏的任何想法?

谢谢

您必须使用 the spec document:

上的 URL

https://www.googleapis.com/upload/youtube/v3/thumbnails/set.

根据我的经验,示例代码页并非百分百可靠(例如,Videos.insert API 端点也遇到同样的问题)。

您必须发出以下 curl 调用:

curl --request POST -v \
  "https://www.googleapis.com/upload/youtube/v3/thumbnails/set\
?videoId=RoZypUhZY04\
&uploadType=media" \
  --header 'Authorization: Bearer my_access_token' \
  --header 'Content-Type: image/jpeg'\
  --data-binary '@/Users/adviner/Projects/Prototypes/VendorAPI/source/YouTube/YouTube-BOS.jpg'

请注意,上面的调用使用了一个 --data-binary 选项,而不是两个 -F 选项(form 选项),其参数以 @ 表示参数的其余部分是文件名。

使用邮递员 http 请求:

[POST] https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId={videoID}&uploadType=media

--headers:  Content-Type: image/jpeg
           Authorization: Bearer ....

以二进制形式发送文件