Youtube 缩略图上传失败 API

Youtube Thumbnail upload Failing with API

我正在尝试以这种方式上传 YouTube 视频的缩略图:


import (
    "bufio"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
)

func main() {

    url := "https://www.googleapis.com/youtube/v3/thumbnails/set?videoId=kU7okI-_vvU&key=[API_KEY]Type=media"
    imageRef, err := os.Open("test.png")
    if err != nil {
        log.Fatal("os.Open", err)
    }
    rd := bufio.NewReader(imageRef)

    req, err := http.NewRequest("POST", url, rd)
    if err != nil {
        log.Fatal("http.NewRequest", err)
    }

    log.Println(req.Body)

    req.Header.Add("authorization", "Bearer [ACCESS_TOKEN]")
    req.Header.Add("content-type", "image/png")

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        log.Fatal("http.DefaultClient", err)
    }

    defer res.Body.Close()
    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatal("ioutil.ReadAll", err)
    }

    fmt.Println(res)
    fmt.Println(string(body))

}

我收到这样的回复:

  "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"
      }
    ]
  }
}

我在 POST 请求中包含图像正文。然而响应显示 “请求不包含图像内容。”。谁能帮忙解决这个问题。

API 要求最大文件大小为 2MB,我已确保这一点。

谢谢。

PS:虽然没有在代码中显示,但结果是通过错误处理进行测试的。

使用纯 HTTP 方法调用 YouTube 数据 API 有时会非常棘手。

你应该一直在使用 Google API Client Library for Go instead. See also the official Go Quickstart

如果您坚持使用当前代码,则需要具备以下条件:

  • 调用URL应该包含参数uploadType=media,并且
  • 应该将 Content-Type header 传递给具有种类 image/png 值的 HTTP 调用(如上所述)。
  • Content-Length header 也应该由您的代码设置(因为这不是在 NewRequestWithContext function; see also this function's doc 中完成的,如下 @Peter 所示)。

您还必须更改 URL,因为根据 official doc,API 端点的 URL 是:

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

请注意您的 URL 缺少 /upload/ 路径组件。