使用他们的 API 和 curl (POST/PATCH) 将视频上传到 Vimeo

Upload a video to Vimeo using their API and curl (POST/PATCH)

据我了解,可以使用 curl 发出 POST 和 PATCH 请求;

POST: https://gist.github.com/subfuzion/08c5d85437d5d4f00e58

补丁:How to use PATCH verb with curl

并且 Vimeo API 支持 POST 和 PATCH 请求上传视频;

https://developer.vimeo.com/api/upload/videos

这是我对如何编写的最佳猜测;

curl --request --url https://api.vimeo.com/me/videos \
--header 'Authorization: bearer {access_token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/vnd.vimeo.*+json;version=3.4' \
--data '{ "upload": { "approach": "tus", "size": "{size}" }}'

我怀疑这全是错误,而且它也没有显示如何使用 PATCH 请求上传视频。

正确的 curl 命令应该是什么样的?

对于使用 Vimeo API 的 tus 上传,这是一个 multi-step 过程:

  1. 在 Vimeo 上创建视频 object
  2. 上传视频文件数据
  3. 确认 Vimeo 已收到您的视频文件

第 1 步是对 /me/videos 的 POST 请求。如果操作正确,您将收到完整的视频回复,其中 "upload" object 包含 "upload_link"。在步骤 2 中使用 upload_link 值。

(请注意,upload_link 应该在 Vimeo "tus" 子域上,例如 files.tus.vimeo.com。如果你在不同的 Vimeo 子域上得到 upload_link,那么您的请求出错,API 默认为另一种上传方法。您还可以通过检查 approach 值来验证您是否获得了 tus upload_link returned嵌套在uploadobject,应该return"tus".)

根据您的示例,--request 缺少 POST verb/action。第 1 步应如下所示(另请注意 -request-header-data 可与 -X-H-d 互换,分别):

curl -X POST https://api.vimeo.com/me/videos \
  -H 'Accept: application/vnd.vimeo.*+json;version=3.4' \
  -H 'Authorization: bearer XXXXXXXXX' \
  -H 'Content-Type: application/json' \
  -d '{"upload":{"approach":"tus","size":"999999"}}'

第 2 步,实际文件上传,是对第 1 步 upload_link return 的 PATCH,请求 body 包含视频文件的原始二进制数据:

curl --request PATCH upload_link \
  -H 'Accept: application/vnd.vimeo.*+json;version=3.4' \
  -H 'Content-Type: application/offset+octet-stream' \
  -H 'Tus-Resumable: 1.0.0' \
  -H 'Upload-Offset: 0' \
  --data-binary /path/to/file.ext

第 3 步是对同一个 upload_link 的 HEAD 请求,没有文件数据:

curl --request HEAD upload_link \
  -H 'Accept: application/vnd.vimeo.*+json;version=3.4' \
  -H 'Tus-Resumable: 1.0.0' \

根据 upload-lengthupload-offset headers returned,您可能需要重复步骤 2,从 Vimeo 服务器上的最后一个字节恢复上传。

Vimeo 的 tus 上传实现文档可在此处找到:https://developer.vimeo.com/api/upload/videos#resumable-approach

希望这能为您指明正确的方向!