对于使用 Vimeo API 的 tus 上传,这是一个多步骤的过程:
- 在 Vimeo 上创建视频对象
- 上传视频文件数据
- 验证 Vimeo 是否已收到您的视频文件
第 1 步是对/me/videos 的 POST 请求。如果操作正确,您将收到完整的视频响应,其中包含一个 "upload" 对象,其中包含一个 "upload_link"。在第 2 步中使用 upload_link 值。
(请注意,upload_link 应该位于 Vimeo “tus”子域中,例如 files.tus.vimeo.com。如果您在不同的 Vimeo 子域中获得 upload_link,那么您的请求出现问题并且 API 处于默认状态到另一种上传方法。您还可以通过检查嵌套在 upload 对象中的 approach 值来验证您是否收到了返回的 tus upload_link,它应该返回“tus”。)
从您的示例中,--request 缺少 POST 动词/动作。第 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 的 PATCH,请求正文包含视频文件的原始二进制数据:
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-length 和 upload-offset 标头,您可能需要重复第 2 步,从 Vimeo 服务器上的最后一个字节恢复上传。
Vimeo 的 tus 上传实现文档可在此处找到:https://developer.vimeo.com/api/upload/videos#resumable-approach
希望这会为您指明正确的方向!