> For the complete documentation index, see [llms.txt](https://polyv.gitbook.io/document/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://polyv.gitbook.io/document/docs/vod/api/video-upload/upload_video.md).

# 上传视频

### 接口描述

```
1、上传视频
2、接口支持https协议
```

**服务端上传推荐使用：**[Java上传SDK](https://git.polyv.net/help-center/document-center/-/blob/master/docs/vod/api/video_upload/vod/api/video_upload/java_upload_sdk_doc/README.md)。

### 接口URL

```
http://v.polyv.net/uc/services/rest?method=uploadfile
```

### 请求方式

POST

### 接口约束

(接口同时支持HTTP 、HTTPS ，建议使用HTTPS 确保接口安全，接口调用有频率限制，[详细请查看](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/limit/README.md))

### 返回结果支持格式

```null
JSON
```

### 请求数限制

```null
TRUE
```

### 请求参数

| 参数名               | 必选    | 类型及范围  | 说明                                                                                                                                                      |
| ----------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| writetoken        | true  | string | 用户的上传钥匙                                                                                                                                                 |
| JSONRPC           | true  | string | json格式，{"title": "标题", "tag":"标签","desc":"描述"}                                                                                                          |
| Filedata          | true  | file   | file类型，支持的文件格式为：.flv，.avi，.mpg，.mp4，.wmv，.mov，.3gp，.asf等                                                                                                |
| fcharset          | flase | string | 当fcharset设为'ISO-8859-1'时，可以避免视频的文件名乱码                                                                                                                   |
| cataid            | false | long   | 设定上传视频的分类，分类的id可以在“视频管理”——“内容分类”中获取，如下图所示。cataid为catatree的最后一个long型的整数，catatree由cataid组成。当cataid值为1时，表示用户上传空间的根目录。                                      |
| luping            | false | int    | 是否录屏优化。当值为1时，上传的视频不再采取默认的压缩编码机制，视频尺寸不再压缩，保证视频的清晰度。默认值为0                                                                                                 |
| format            | false | string | 默认返回json格式，如果format=xml返回xml格式                                                                                                                          |
| jsonp             | false | string | 例如，正常情况{error:0,data:””}，加 jsonp=a后返回a({error:0,data:””})                                                                                               |
| fileMd5           | false | string | 文件校验码，为32位大写MD5的值                                                                                                                                       |
| watermark         | false | string | 自定义水印图片地址,图片格式必须是png格式，支持http、https。                                                                                                                    |
| watermarkLocation | false | string | 自定义水印图片位置，如没该参数，则自定义水印的显示情况跟随分类和账号。1：左上角；2：右上角；3：左下角；4：右下角                                                                                              |
| state             | false | string | 用户自定义数据，如果提交了该字段，会在[上传完成回调](https://git.polyv.net/help-center/document-center/-/blob/master/docs/vod/api/video_upload/vod/api/callBack/README.md)时透传返回。 |

![2](/files/rqhUcDEM4ALf0mDXz5No)

### 注意事项

```null
上传视频接口POST不能携带cookie
上传的视频不能大于 2G
返回错误列表
```

| 返回 | 说明                    |
| -- | --------------------- |
| 0  | 无错误                   |
| 1  | 找不到writetoken关联的user  |
| 2  | 文件为空或者writetoken为空    |
| 3  | 提交的json名字JSONRPC为null |
| 4  | 提交文件格式不正确 或 视频大于 2G   |
| 5  | readtoken为空           |
| 6  | 分页输入出错                |
| 7  | vid不能为空               |
| 8  | 找不到方法名                |
| 14 | 文件md5校验失败             |
| 15 | 后台处理出错                |
| 16 | 用户的可用空间已用完            |

### 返回结果

```xml
<xml>
<error>0</error>
<total/>
<data>
<video>
<md5checksum>
<![CDATA[ 44b145c6bea7dd826191990dfb38d1fd ]]>
</md5checksum>
<tag>
<![CDATA[ 标签 ]]>
</tag>
<mp4>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.mp4]]>
</mp4>
<title>
<![CDATA[ upload上传视频 ]]>
</title>
<df>2</df>
<times>
<![CDATA[ 0 ]]>
</times>
<mp4_1>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.mp4]]>
</mp4_1>
<vid>
<![CDATA[ 36e77ba39cc4768ab541cb6bf4f775a0_3 ]]>
</vid>
<mp4_2>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_2.mp4]]>
</mp4_2>
<cataid>
<![CDATA[ 1 ]]>
</cataid>
<swf_link>
<![CDATA[http://player.polyv.net/videos/36e77ba39cc4768ab541cb6bf4f775a0_3.swf]]>
</swf_link>
<status>
<![CDATA[ 10 ]]>
</status>
<seed>1</seed>
<flv2>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_2.flv]]>
</flv2>
<flv1>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.flv]]>
</flv1>
<sourcefile>
<![CDATA[ ]]>
</sourcefile>
<playerwidth>
<![CDATA[ 600 ]]>
</playerwidth>
<hls/>
<default_video>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.flv]]>
</default_video>
<duration>
<![CDATA[ 00:00:33 ]]>
</duration>
<filesize/>
<first_image>
<![CDATA[http://img.videocc.net/uimage/3/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_0.jpg]]>
</first_image>
<original_definition>
<![CDATA[ 672x378 ]]>
</original_definition>
<context>
<![CDATA[ 视频文档描述 ]]>
</context>
<previewVid>
<![CDATA[ m63c44pl69mm7435lp871mp3pn7n448l0_6 ]]>
</previewVid>
<playerheight>
<![CDATA[ 490 ]]>
</playerheight>
<ptime>
<![CDATA[ 2017-12-04 10:36:18 ]]>
</ptime>
</video>
</data>
</xml>
```

### Java请求示例

快速接入基础代码请下载相关依赖源码， [点击下载源代码](https://git.polyv.net/help-center/document-center/-/blob/master/third_res/util.zip) ,下载后加入到自己的源码工程中即可。测试用例中的**HttpUtil.java 和 VodSignUtil.java** 都包含在下载文件中。

> 强烈建议您使用[点播Java SDK](https://git.polyv.net/help-center/document-center/-/blob/master/vod/java/README.md)完成API的功能对接，点播Java SDK 对API调用逻辑、异常处理、数据签名、HTTP请求线程池进行了统一封装和优化。

```java
private static final Logger log = LoggerFactory.getLogger(VodVideoUploadTest.class);
/**
 * 上传点播视频
 */
@Test
public void testUpload() throws Exception, NoSuchAlgorithmException {
    //业务参数
    String url = "http://v.polyv.net/uc/services/rest?method=uploadfile";
    String writeToken = super.writeToken;
    
    Map<String, String> requestMap = new HashMap<>();
    requestMap.put("writetoken", writeToken);
    requestMap.put("JSONRPC", "{\"title\": \"标题\", \"tag\":\"标签\",\"desc\":\"描述\"}");
    Map<String, File> fileMap = new HashMap<>();
    fileMap.put("Filedata",new File("E:\\polyv\\polyv.mp4"));
    String response = HttpUtil.postFile(url,requestMap,fileMap,null);
    log.debug("测试上传点播视频,{}", response);
    //do somethings
}
```

### JSON示例

```json
{
error: "0",
data: [
{
images_b: [
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_3_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_4_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_5_b.jpg"
],
md5checksum: "44b145c6bea7dd826191990dfb38d1fd",
tag: "标签",
mp4: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.mp4",
title: "标题",
df: 2,
times: "0",
mp4_1: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.mp4",
vid: "36e77ba39c0e5dac84dba418d81a793d_3",
mp4_2: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.mp4",
cataid: "1",
swf_link: "http://player.polyv.net/videos/36e77ba39c0e5dac84dba418d81a793d_3.swf",
source_filesize: 2295887,
status: "10",
seed: 1,
flv2: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.flv",
flv1: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.flv",
sourcefile: "",
playerwidth: "600",
hls: [
"http://hls.videocc.net/36e77ba39c/3/36e77ba39c0e5dac84dba418d81a793d_1.m3u8",
"http://hls.videocc.net/36e77ba39c/3/36e77ba39c0e5dac84dba418d81a793d_2.m3u8"
],
default_video: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.flv",
duration: "00:00:33",
filesize: [
0,
0
],
first_image: "http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0.jpg",
original_definition: "672x378",
context: "描述",
images: [
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_3.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_4.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_5.jpg"
],
previewVid: "363c44pl69m0c8klm57kpl715k51l496k_6",
playerheight: "490",
ptime: "2017-12-04 11:12:50"
}
]
}
```

### 字段说明

| 字段             | 说明                                     |
| -------------- | -------------------------------------- |
| swf\_link      | Flash链接地址                              |
| tag            | 标签                                     |
| mp4            | 视频地址                                   |
| playerwidth    | 视频宽度                                   |
| title          | 视频标题                                   |
| duration       | 视频时长                                   |
| first\_image   | 视频截图                                   |
| times          | 点击次数                                   |
| context        | 视频描述                                   |
| images         | 所有截图                                   |
| previewVid     | 预览视频VID                                |
| playerheight   | 视频高度                                   |
| ptime          | 上传时间                                   |
| vid            | 视频id                                   |
| cataid         | 分类id， 如1为根目录                           |
| default\_video | 用户默认播放视频                               |
| df             | 视频码率数                                  |
| flv1           | 流畅码率flv格式视频地址                          |
| flv2           | 高清码率flv格式视频地址                          |
| flv3           | 超清码率flv格式视频地址                          |
| mp4\_1         | 流畅码率mp4格式视频地址                          |
| mp4\_2         | 高清码率mp4格式视频地址                          |
| mp4\_3         | 超清码率mp4格式视频地址                          |
| hls1           | 流畅码率hls格式视频地址                          |
| hls2           | 高清码率hls格式视频地址                          |
| hls3           | 超清码率hls格式视频地址                          |
| hlsIndex       | 自适应码率hls播放地址                           |
| images\_b      | 视频截图大图地址                               |
| seed           | 加密视频为1，非加密为0                           |
| status         | 视频状态                                   |
| md5checksum    | 上传到POLYV云平台的视频源文件的MD5值，可以用来校验是否上传错误或完整 |

| 视频状态码 | 含义     |
| ----- | ------ |
| 60/61 | 已发布    |
| 10    | 等待编码   |
| 20    | 正在编码   |
| 40    | 视频处理失败 |
| 50    | 等待审核   |
| 51    | 审核不通过  |
| -1    | 已删除    |

如果API想调用签名，可参考[签名生成规则](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/buildSign/README.md) 按参数签名顺序拼凑字符串为cataid=$(cataid)\&JSONRPC=$(JSONRPC)\&writetoken=$(writetoken)$(secretkey)，并进行sha1计算，得到sign。
