文档首页> > 客户端SDK参考> 上传SDK> Java上传SDK

Java上传SDK

更新时间: 2018-11-29 20:14

Java上传SDK用于Java程序对视频文件的上传。提供的接口包括分段上传和断点续传。

除了点播服务SDK之外,用户还需集成其他SDK(如OBS SDK)。

SDK之间的配合如下:

以客户端调用上传JAVA-SDK为例,步骤如下:

  1. 租户客户端向租户服务端发起授权请求。
  2. 租户服务端调用VOD的服务端SDK获取临时AK、SK、securityToken。
  3. 将VOD返回临时AK、SK、securityToken返回给租户客户端。为保证AK、SK的安全性,此处交互建议租户使用HTTPS协议并采取合适的加密手段保证信息传输安全。
  4. 客户端向服务端发起创建媒资的请求,然后由租户服务器调用服务端sdk向点播服务创建媒资,并将创建媒资的相关响应信息如bucket、objectKey等信息返回给客户端。
  5. 租户客户端调用上传SDK分段上传接口,并传入相关参数,使用临时AK、SK向OBS发起上传。
  6. 上传完成后租户客户端向租户服务端发起确认已上传请求,再由租户服务端向VOD调用确认媒资上传接口,完成媒资创建。
说明:
  • 该上传SDK用于客户端,需要与租户自己的服务端配合使用,服务端可以使用点播服务的服务端SDK来完成与点播服务的交互。
  • 上传SDK需要使用临时AK、SK,为保证AK、SK的安全性,此处交互建议租户使用HTTPS协议并采取合适的加密手段保证信息传输安全。
  • 客户端的创建媒资和确认上传接口由租户服务端保证,上传SDK无对应接口,仅提供上传操作。
  • 上传操作采用分段上传,创建媒资时无需计算媒资文件的MD5。

兼容性

支持的JDK版本:JDK 1.8.0_65版本及以上。

SDK下载

JAVA上传SDK最新版本,请到SDK开发者中心下载。

安装SDK

  1. Java环境配置。

    说明:

    本SDK包要求的JDK版本高于JDK8版本,以下步骤以win7环境配置JDK8 64位为例,若已经下载JDK并配置好环境请忽略本章节。

    1. 下载JDK文件:http://www.oracle.com/technetwork/java/javase/downloads/index.html
    2. 下载完成后按照提示安装,位置自选,比如安装到本地“C:\Program Files\Java\jdk1.8.0_131”。
    3. 配置Java环境变量:右键“计算机>属性>高级系统设置>环境变量”,进行如下操作。
      1. 新建系统变量JAVA_HOME,变量值为实际JDK安装位置。
      2. 在path中添加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin (注意用英文分号分隔)。
      3. 新建系统变量CLASSPATH,变量值为%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 。
    4. 打开命令行窗口,输入“java -version”,显示如下图所示表示配置成功。

  2. 获取SDK。

    如果您当前还没有下载SDK,请访问SDK下载获取网址下载SDK。

  3. Eclipse安装与SDK工程导入。

    1. http://www.eclipse.org/downloads/packages/下载对应平台的eclipse版本,比如:eclipse-jee-mars-R-win32-x86_64.zip。
    2. 解压后直接打开eclipse。
    3. 确保 “Windows>Preferences>Java>Installed JREs”配置正确的JRE路径。
    4. 在左侧工程上点击右键,择“Build path->Configure Build Path...”,在弹出框中左边选择"Java Build Path",在右边选择"Libraries"页签,然后点击右边的"Add External JARs...",选择点播sdk的所在的本地位置。

    5. 单击OK,导入SDK,导入后打开工程,工程目录如下:

获取临时AK、SK

通过临时AK、SK和项目ID设置,可以自动完成签名鉴权,所以需要先获取到临时AK、SK。

获取方法请参考:获取临时AK/SK/securityToken

获取项目ID

通过临时AK、SK和项目ID设置,可以自动完成签名鉴权,所以需要先在管理控制台上获取到项目ID。

项目ID获取步骤如下:

  1. 登录华为云服务
  2. 在华为云服务首页上面单击“控制台”进入控制台管理页面。

  3. 单击右上方登录的用户,进入“账号中心”页面。
  4. 在“基本信息”页面,单击“管理我的凭证”。

  5. 在“我的凭证”页面的“项目列表”页签查看项目ID。

API参考

JAVA上传SDK最新API参考,请到SDK开发者中心下载。

代码示例

断点续传

支持断点续传,大文件上传持续时间长,当上传过程中出现网络异常程序崩溃等导致上传中断情况时,可以调用断点续传接口继续上传,断点续传是将文件分成若干段进行上传,当所有段上传完成时会合并成完整文件,完成整个文件上传。文件上传时断点续传接口将会自动记录当前上传进度信息,当发生异常中断时,不需要用户手动调用,再次上传时会从上次中断记录点继续上传,节省时间和流量成本。

/*
* 业务流程:
* 1、首先需要导入点播sdk包cloud-java-sdk-vod-upload-1.1.0.jar和其他相关依赖jar包
* 2、设置点播服务配置项,包括点播服务节点地址、AK、SK和ProjectId等,用于连接点播服务和进行授权等。
* 3、设置OBS对象存储服务的配置项,用于进行对象上传
* 4、构造媒资上传请求参数。
* 5、发送媒资上传请求。
* 6、返回处理信息。
*/

import com.google.gson.Gson;
import com.huawei.upload.common.obs.ObsConfig;
import com.huawei.upload.common.obs.model.FileMeta;
import com.huawei.upload.vod.client.VodClient;
import com.huawei.upload.vod.client.VodConfig;
import com.huawei.upload.vod.service.ObsService;
import com.obs.services.model.CompleteMultipartUploadResult;
import com.obs.services.model.PartEtag;

//设置点播服务配置项构造方法
VodConfig vodConfig = new VodConfig();
//设置用户项目编号ProjectId,查看项目ID参考 "查看项目ID"章节
vodConfig.setProjectId("projectId");
//设置点播服务节点地址,如点播服务的Endpoint当前为“vod.cn-north-1.myhuaweicloud.com”
vodConfig.setEndPoint("endPoint");
//设置临时AK、SK, 临时AK、SK需要由租户服务端调用服务端SDK获取
vodConfig.setAk("ak");
vodConfig.setSk("sk");

/*if you need proxy*/
//设置代理,根据实际需要是否设置,非必须
/*
ClientConfig clientConfig = new ClientConfig();
//设置代理服务器主机IP
clientConfig.setProxyHost(proxyHost);
//设置代理服务器端口号
clientConfig.setProxyPort(Integer.parseInt(proxyPort));
//设置代理服务器用户名
clientConfig.setProxyUserName(proxyUserName);
//设置代理服务器用户密码
clientConfig.setProxyPassword(proxyPassword);

//设置连接OBS的相关配置,必须
ObsConfig obsConfig = new ObsConfig();
//设置OBS服务节点地址,如OBS服务的Endpoint当前为“obs.cn-north-1.myhuaweicloud.com”
obsConfig.setEndPoint("obsEndPoint");
//设置上传文件时每个分段的大小,单位为M,最小5M
obsConfig.setPartSize(5);
//设置是否分段并发上传,传入参数为并发数量,当入参小于等于1时代表串行上传。
obsConfig.setConcurrencyLevel(0);


*/      
//点播服务构造方法,在没有配置代理的情况下使用该构造方法
VodClient vodClient=new VodClient(VodConfig, obsConfig);

/*
* proxy provided
* //点播服务构造方法,在需要配置代理的情况下使用该构造方法
* VodClient vodClient=new VodClient(VodConfig, clientConfig, obsConfig);
*/

/**初始化上传信息,需要传入待上传文件的本地文件地址(绝对路径)、媒资所在的桶名、媒资所在的ObjectKey
*    此处的filePath指本地文件的文件地址的绝对路径,如 d://test.mp4
*    bucket、objectKey 需要服务端调用创建媒资接口后获得并返回给客户端,详情需要参考点播服务端的创建媒资接口
*/
FileMeta fileMeta = new FileMeta("filePath", "bucket", "objectKey");

/*
 * 传入FileMeta后开始上传,不支持回调
 * CompleteMultipartUploadResult result = vodClient.multipartUploadFile(fileMeta);
 */

// 开始上传,可以传入一个回调内部类来实时获取上传信息。
CompleteMultipartUploadResult result = vodClient.multipartUploadFile(fileMeta, new ObsService.OnPartEtagUploadedListener() {
      
      @Override  //初始化段结束时回调
      public void onInitMultiUploadPart(String uploadId) {
      System.out.println("Init end, uploadId is : " + uploadId);
      }

      @Override   //上传完每一段时回调,可以获取回调时的PartEtag,上传进度。 
      public void onUploadEachPart(PartEtag partEtag, String uploadId, int progess) {
      System.out.println("The partEtag " + partEtag.toString() + " is end !  Current progress: " + uploadId);
      }      

      @Override   // 上传完成时回调
      public void onCompleteMultiUpload(String uploadId) {
      System.out.println("Complete end: " + uploadId);
      }

      @Override
      public void onError(Throwable e) {
      e.printStackTrace();
      }});
//返回处理消息
System.out.println(new Gson().toJson(result));
说明:
  • 此处是断点续传示例,租户客户端在调用前需要从租户服务端获取媒资上传需要的bucket、objectKey、临时AK、SK。
  • 客户端可以在初始化ObsConfig时设置分段大小以及并发数。但再次调用断点续传上传剩余段时设置分段大小无效,默认第一次设置的分段大小
  • 断点续传前需要与第一次上传一致的bucket、objectKey、文件,否则默认为未上传过从第一段开始上传

错误处理

在使用Java SDK时,当服务端或者SDK端出错时,SDK会返回相应的异常信息。这些异常信息有两种,一种是和VOD进行交互获取临时授权时产生的错误,这种错误一般会以抛异常方式抛出,用户需要注意捕获。还有一种是上传过程中产生的错误,可以在调用上传接口的时候传入回调内部类,并在onError(Throwable th)中捕获处理。

如果您需要对SDK的错误进行处理,可以参考如下示例编写代码:

import com.google.gson.Gson;
import com.huawei.upload.common.obs.ObsConfig;
import com.huawei.upload.common.obs.model.FileMeta;
import com.huawei.upload.vod.client.VodClient;
import com.huawei.upload.vod.client.VodConfig;
import com.huawei.upload.vod.service.ObsService;
import com.obs.services.model.CompleteMultipartUploadResult;
import com.obs.services.model.PartEtag;

//设置点播服务配置项构造方法
VodConfig vodConfig = new VodConfig();
//设置用户项目编号ProjectId,查看项目ID参考 "查看项目ID"章节
vodConfig.setProjectId("projectId");
//设置点播服务节点地址,如点播服务的Endpoint当前为“vod.cn-north-1.myhuaweicloud.com”
vodConfig.setEndPoint("endPoint");
//设置临时AK、SK, 临时AK、SK需要由租户服务端调用服务端SDK获取
vodConfig.setAk("ak");
vodConfig.setSk("sk");

/*if you need proxy*/
//设置代理,根据实际需要是否设置,非必须
/*
ClientConfig clientConfig = new ClientConfig();
//设置代理服务器主机IP
clientConfig.setProxyHost(proxyHost);
//设置代理服务器端口号
clientConfig.setProxyPort(Integer.parseInt(proxyPort));
//设置代理服务器用户名
clientConfig.setProxyUserName(proxyUserName);
//设置代理服务器用户密码
clientConfig.setProxyPassword(proxyPassword);

//设置连接OBS的相关配置,必须
ObsConfig obsConfig = new ObsConfig();
//设置OBS服务节点地址,如OBS服务的Endpoint当前为“obs.cn-north-1.myhuaweicloud.com”
obsConfig.setEndPoint("obsEndPoint");
//设置上传文件时每个分段的大小,单位为M,最小5M
obsConfig.setPartSize(5);
//设置是否分段并发上传,传入参数为并发数量,当入参小于等于1时代表串行上传。
obsConfig.setConcurrencyLevel(0);


*/      
//点播服务构造方法,在没有配置代理的情况下使用该构造方法
VodClient vodClient=new VodClient(VodConfig, obsConfig);

/*
* proxy provided
* //点播服务构造方法,在需要配置代理的情况下使用该构造方法
* VodClient vodClient=new VodClient(VodConfig, clientConfig, obsConfig);
*/

// 初始化上传信息,需要传入待上传文件的文件地址、媒资所在的桶名、媒资所在的ObjectKey
FileMeta fileMeta = new FileMeta("filePath", "bucket", "objectKey");

/*
 * 传入FileMeta后开始上传,不支持回调
 * CompleteMultipartUploadResult result = vodClient.multipartUploadFile(fileMeta);
 */

// 开始上传,可以传入一个回调内部类来实时获取上传信息。如需要断点续传,则需要记录下上传任务的uploadID和所有已上传的PartEtag,用于断点续传时告诉sdk已有哪些段已上传
try{
  CompleteMultipartUploadResult result = vodClient.multipartUploadFile(fileMeta, new ObsService.OnPartEtagUploadedListener() {
      
      @Override  //初始化段结束时回调
      public void onInitMultiUploadPart(String uploadId) {
      System.out.println("Init end, uploadId is : " + uploadId);
      }

      @Override   //上传完每一段时回调,可以获取回调时的PartEtag,上传进度。 若需要断点续传则需要保留该PartEtag
      public void onUploadEachPart(PartEtag partEtag, String uploadId, int progess) {
      System.out.println("The partEtag " + partEtag.toString() + " is end !  Current progress: " + uploadId);
      }      

      @Override   // 上传完成时回调
      public void onCompleteMultiUpload(String uploadId) {
      System.out.println("Complete end: " + uploadId);
      }

      @Override
      public void onError(Throwable e) {
      // 处理上传过程中产生的错误
      e.printStackTrace();
      }});
  } catch(Exception ex)
      {  // 处理和VOD交互产生的错误
         ex.printStackTrace();
       } 

//返回处理消息
System.out.println(new Gson().toJson(result));

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

在文档使用中是否遇到以下问题







请至少选择或填写一项反馈信息

字符长度不能超过100

反馈内容不能为空!

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区
点我,12·12惊喜等着你哦~