【问题标题】:Upload a video to Vimeo using their API and curl (POST/PATCH)使用他们的 API 和 curl (POST/PATCH) 将视频上传到 Vimeo
【发布时间】:2019-12-09 13:41:36
【问题描述】:

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

发帖: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 命令是什么样的?

【问题讨论】:

    标签: curl vimeo vimeo-api


    【解决方案1】:

    对于使用 Vimeo API 的 tus 上传,这是一个多步骤的过程:

    1. 在 Vimeo 上创建视频对象
    2. 上传视频文件数据
    3. 验证 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-lengthupload-offset 标头,您可能需要重复第 2 步,从 Vimeo 服务器上的最后一个字节恢复上传。

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

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

    【讨论】:

    • 几个问题; 1)bearer XXXXXXXXX 代表什么,如何传递身份验证密钥?此外,后续调用是否需要再次进行此身份验证? 2)如果上传失败而不是字节拆分,有什么方法可以重新上传? 3) 我惊讶地发现我的--data/-d 的想法几乎是正确的。真的可以像那样发送ASCII数据吗?再次感谢您,非常感谢。稍后我可能还有一些问题。
    • @Roel 1) XXXXXX 是您应该插入身份验证令牌的位置,并且对api.vimeo.com 的每个请求都需要一个令牌:developer.vimeo.com/api/…。 2)理论上你可以执行替换/新版本上传。您可以对步骤 1 中返回的 /versions uri 进行 POST,而不是执行 POST /me/videos。替换上传文档:developer.vimeo.com/api/upload/videos#replacing-a-source-file。 3) 是的,您应该能够按照描述使用-d,请查看 curl 文档以获取完整详细信息:curl.haxx.se/docs/manpage.html#-d
    • 在第 2 步下:如何提供数据 @TommyPenner 你能举个例子吗?我使用了以下代码:---data-binary '/home/abhi/intership/vimeo/1.mp4'
    猜你喜欢
    • 2016-01-12
    • 2013-04-23
    • 2023-03-07
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多