用户上传


上传流程描述


正常上传

_images/youkuuploadapi-generalupload_v0.2.png

1. create:连接开放平台上传接口服务器,服务器端会返回upload_token以及upload_server_uri。
2. create_file:连接上传服务器(通过upload_server_uri解析出上传服务器IP地址,以下所述上传服务器,均指此IP地址对应的服务器)。主要目的是创建上传文件,提交上传文件信息。
3. new_slice:连接上传服务器,以upload_token作为参数,请求创建slice_task_id,获取第一个上传分片的开始位置offset,分片长度等。
4. upload_slice:连接上传服务器,上传分片。
5. check: 连接上传服务器,以upland_token作为参数,检查上传任务是否完成。返回结果如下:

* status=1:文件上传完成,并且全部确认写入磁盘;
* status=2:文件上传中,全部分片上传任务已经分派,见返回字段transferred_percent;
* status=3:文件上传中,所有分片上传任务都已完成,但是依然有的分片还未确认写入磁盘,见返回字段confirmed_percent;
* status=4:文件上传中,还有分片上传任务未分配。
  1. 6. commit: 连接上传服务器,确认上传过程结束,提交上传任务。

续传

1. check:连接上传服务器(客户端需要记录之前通过upload_server_uri解析出的服务器IP地址),检查上传任务是否完成。返回结果如下:

* status=1:文件上传完成,并且全部确认写入磁盘;
* status=2:文件上传中,全部分片上传任务已经分派,见返回字段transferred_percent;
* status=3:文件上传中,所有分片上传任务都已完成,但是依然有的分片还未确认写入磁盘,见返回字段confirmed_percent;
* status=4:文件上传中,还有分片上传任务未分配。
  1. upload(分为两种情况):

    • 如果check返回4,则通过调用new_slice、upload_slice上传分片;
    • 如果check返回2或者3则需等待一段时间(比如:60秒)后再次发出check请求。
  2. commit:连接上传接口服务器,确认上传过程结束,提交上传任务。

接口描述

准备阶段

获取登录凭证

手动获取access_token

刷新登录凭证

当旧的access_token过期后,此接口用来刷新access_token,用来避免每日登录。

  • 接口

        POST https://api.youku.com/oauth2/token.json
POST /oauth2/token.json
Host: api.youku.com

client_id=123&grant_type=refresh_token&refresh_token=4bda296b570a6bba6ff02944cf10d13f

-----------------------

HTTP/1.1 200 OK

{
        "access_token":"11d0b7627154f0dd000e6084f3811598",
        "expires_in":"3600",
        "refresh_token":"4bda296b570a6bba6ff02944cf10d13f",
        "token_type":"bearer"
}

上传阶段

create

上传创建接口,用于提交将要上传视频的信息如:title,tags和category等。

  • 接口

    GET https://api.youku.com/uploads/create.json
GET /uploads/create.json?client_id=123&access_token=demo_access_token &title=demo%20video&tags=demo &public_type=password©right_type=original&watch_password=123456&description=this%20is%20a%20demo
&file_md5=00000000000000000000000000&file_name=demo.avi&file_size=123456
Host: api.youku.com

-----------------------

201 Created

{ "upload_token": "1a2b3c4d", "video_id": "xxxxxx", "upload_server_uri": "g01.upload.youku.com" }


upload

文件上传过程包含分片上传等子过程,具体步骤的详细描述如下:

上传服务器”g01.upload.youku.com”需要通过用户本地域名服务器解析为IP地址,以下步骤中提到的上传服务器都需要替换为相应IP地址。

http://gX.upload.youku.com/gupload 应当被替换为: http://214.54.36.57/gupload

“214.54.36.57” is “gX.upload.youku.com” pinged from your local address.

create_file
  • 接口

POST http://gX.upload.youku.com/gupload/create_file
POST /gupload/create_file
Host: g01.upload.youku.com

upload_token=1a2b3c4d&file_size=87654321&ext=avi&slice_length=2048

-------------------
201 Created

{ }
new_slice

获取第一个分片的任务ID,分片在视频源文件中开始位置,长度等。

GET http://gX.upload.youku.com/gupload/new_slice
GET /gupload/new_slice?upload_token=1a2b3c4d
Host:g01.upload.youku.com

----

201 Created

{ "slice_task_id": 1328793281567, "offset": 12358023, "length": 12345, "transferred": 12358023, "finished": false }
upload_slice

调用#new_slice,从返回结果获得此接口对应的各项参数,多次调用,直至check过程finished字段值为true。

POST http://gX.upload.youku.com/gupload/upload_slice
POST /gupload/upload_slice?upload_token=1a2b3c4d&slice_task_id=1328792850123&offset=12345678&length=12345&crc=dfc6f27b
Host: g01.upload.youku.com

< .. BINARY DATA .. >

-------------------------

201 Created

{ "slice_task_id": 1328793281567, "offset": 12358023, "length": 12345,
"transferred": 12358023, "finished": false }
check

查询视频上传过程中的状态。

 GET http://gX.upload.youku.com/gupload/check 

GET http://gX.upload.youku.com/gupload/check?upload_token=1a2b3c4d
Host:g01.upload.youku.com

--------------

200 OK

{ "status": 4, "upload_server_ip": "16.103.65.55",
"transferred_percent": 0, "confirmed_percent": 0, "empty_tasks": 114,
"finished": false }
commit
POST https://api.youku.com/uploads/commit.json
POST /uploads/commit.json Host: api.youku.com

client_id=123&access_token=demo_access_token&upload_token=1a2b3c4d&upload_server_ip=1.2.3.4

-----------------

200 OK

{ "video_id": "XMjg1MTcyNDQ0" }
cancel

取消当前上传session,包括分片上传任务。

GET https://api.youku.com/uploads/cancel.json
GET /uploads/cancel.json?client_id=123&access_token=demo_access_token
Host: api.youku.com

--------------

200 OK

{ "upload_token": "1a2b3c4d" }

Error Definition