YouTube API:如何上传缩略图 (JS)

YouTubeAPI: How to upload thumbnail (JS)

我尝试使用此指南在 youtube 上上传缩略图:https://developers.google.com/youtube/v3/docs/thumbnails/set

我能够使用此 curl 在邮递员上成功 运行 它:

curl --location --request POST 'https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=<video id>' \
--header 'Authorization: OAuth <token>' \
--header 'Content-Type: image/png' \
--form 'thumbnail=@"/C:/Users/user/Pictures/nami.PNG"'

但是我无法将其转换为 js,目前我所做的是:

// the "file" is the File from <input type="file"> - data on this looks ok
uploadThumbnail async (file) {
   const formData = new FromData();
   const formData.append('thumbnail', file, 'test.png');


   await fetch.post('https://www.googleapis.com/youtube/v3/thumbnails/set', {
     headers: {
        Authorization: 'Oauth <token>',
        'Content-Type': 'multipart/form-data' // I also tried using the file.type here (image/png)
     },
     query: {
       videoId: <video id>
     },
     body: formData,
   })
}

(为了简化逻辑,上面的代码我只是手打,如有错字请见谅)

但这会抛出 The request does not include the image content. 我不明白,我也尝试将文件转换为 Blob,但同样的错误。

正如我的主要 post 上的评论所指出的,我结合了答案并得出了这个(这有效!)

   await fetch.post(`https://www.googleapis.com/upload/youtube/v3/thumbnails/set?videoId=${videoId}&uploadType=media`, {
     headers: {
        Authorization: 'Bearer <token>',
        'Content-Type': file.type
     },
     body: file,
   })

错误是:

  • 我的端点是错误的并且缺少 uploads(这个 API 与其他 youtube 端点不同,所以如果您要重复使用变量 base_url 最好检查一下。
  • 使用 Oauth 代替 Bearer
  • fetch
  • 中没有query
  • 无需转换添加formData,直接传文件