zoukankan      html  css  js  c++  java
  • 上传视频到阿里云服务器

    ######上传视频到阿里云服务器工具类
    1.maven坐标

    <dependency>
    		<groupId>com.aliyun</groupId>
    		<artifactId>aliyun-java-sdk-sts</artifactId>
    		<version>2.1.6</version>
    	</dependency>
    	<dependency>
    		<groupId>com.aliyun</groupId>
    		<artifactId>aliyun-java-sdk-core</artifactId>
    		<version>2.2.0</version>
    	</dependency>
    	<dependency>
    		<groupId>com.aliyun</groupId>
    		<artifactId>aliyun-java-sdk-ecs</artifactId>
    		<version>2.2.0</version>
    	</dependency>
    	<dependency>
    		<groupId>com.aliyun</groupId>
    		<artifactId>aliyun-java-sdk-mts</artifactId>
    		<version>2.1.6</version>
    	</dependency>
    	<dependency>
    		<groupId>com.aliyun.oss</groupId>
    		<artifactId>aliyun-sdk-oss</artifactId>
    		<version>2.5.0</version>
    	</dependency>
    
    	<dependency>
    		<groupId>org.apache.poi</groupId>
    		<artifactId>poi</artifactId>
    		<version>3.14</version>
    	</dependency>
    

      2.工具类

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    import org.springframework.web.multipart.MultipartFile;
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.UploadFileRequest;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.mts.model.v20140618.AddTemplateRequest;
    import com.aliyuncs.mts.model.v20140618.AddTemplateResponse;
    import com.aliyuncs.mts.model.v20140618.DeleteTemplateRequest;
    import com.aliyuncs.mts.model.v20140618.DeleteTemplateResponse;
    import com.aliyuncs.mts.model.v20140618.QueryJobListRequest;
    import com.aliyuncs.mts.model.v20140618.QueryJobListResponse;
    import com.aliyuncs.mts.model.v20140618.SearchPipelineRequest;
    import com.aliyuncs.mts.model.v20140618.SearchPipelineResponse;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsRequest;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult.Job;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult.Job.Output;
    import com.aliyuncs.mts.model.v20140618.SubmitJobsResponse.JobResult.Job.Output.OutputFile;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.mailsend.UUIDUtil;
    import com.rest.entity.Parament;
    public class VedioUtil {
    	  /**
    	   * 断点上传文件
    	   * @param endpoint 
    	   * @param accessKeyId
    	   * @param accessKeySecret
    	   * @param fileurl  文件路径
    	   * @param bucket 传入的bucket名称
    	   * @param filename  文件名称
    	   * @param location 传入的bucket服务区
    	   * @throws Throwable 
    	   */
    	 public String uploadFile(String endpoint,String accessKeyId,String accessKeySecret,String fileurl,String bucket,String filename ,String location,String templateId) throws Throwable{
    		 filename=UUIDUtil.uuid();
    		 // 创建OSSClient实例
    		 OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    		 // 设置断点续传请求
    		 UploadFileRequest uploadFileRequest = new UploadFileRequest(bucket, filename);
    		 // 指定上传的本地文件
    		 uploadFileRequest.setUploadFile(fileurl);
    		 // 指定上传并发线程数
    		 uploadFileRequest.setTaskNum(5);
    		 // 指定上传的分片大小
    		 uploadFileRequest.setPartSize(1 * 1024 * 1024);
    		 // 开启断点续传
    		 uploadFileRequest.setEnableCheckpoint(true);
    		 System.out.println("开始上传视频.....");
    		 // 断点续传上传
    		 ossClient.uploadFile(uploadFileRequest);
    		 System.out.println("上传成功!");
    		 System.out.println("开始转码...");
    		 String url=transcoding(bucket, location, filename, accessKeyId, accessKeySecret,templateId);
    		 System.out.println("转码后播放地址:"+url);
    		 //删除指定对象
    		  ossClient.deleteObject(bucket, filename);
    		 // 关闭client
    		 ossClient.shutdown();
    		 return url;
    	 }
    	/**
    	 * 视频转码
    	 * @param bucket 输入bucket名称
    	 * @param location 输入服务区
    	 * @param filename 文件名
    	 * @param accessKeyId
    	 * @param accessKeySecret
    	 * @return 转码后播放地址
    	 * @throws ClientException
    	 */
    	  public String transcoding(String bucket,String location,String filename,String accessKeyId,String accessKeySecret,String templateId) throws ClientException{
    		  System.out.println(bucket+"--"+location+"--"+templateId);
    		  String url="";
    		  if(location.equals("oss-cn-beijing")){
    			  //华北2
    			  DefaultProfile.addEndpoint("cn-beijing",
    		              "cn-beijing",
    		              "Mts",
    		              "mts.cn-beijing.aliyuncs.com");
    		  }else if(location.equals("oss-cn-shanghai")){
    			//华东2
    			  DefaultProfile.addEndpoint("cn-shanghai",
    		              "cn-shanghai",
    		              "Mts",
    		              "mts.cn-shanghai.aliyuncs.com");
    		  }else if(location.equals("oss-cn-hangzhou")){
    			  //华东1
    			  DefaultProfile.addEndpoint("cn-hangzhou",
    		              "cn-hangzhou",
    		              "Mts",
    		              "mts.cn-hangzhou.aliyuncs.com");
    		  }else if(location.equals("oss-cn-shenzhen")){
    			//华南1
    			  DefaultProfile.addEndpoint("cn-shenzhen",
    		              "cn-shenzhen",
    		              "Mts",
    		              "mts.cn-shenzhen.aliyuncs.com");
    		  }
    	 
    	  //开始转码
    	   SubmitJobsRequest submitjobs=new SubmitJobsRequest();
    	   String input="{"Bucket":""+bucket+"","Location":""+location+"","Object":""+filename+""}";
    	   String outputs="[{"OutputObject":"_"+filename+"","TemplateId":""+templateId+""}]";
    	   String outputbucket=bucket;
    	   String OutputLocation=location;
    	   submitjobs.setOutputLocation(OutputLocation);
    	   submitjobs.setInput(input);
    	   submitjobs.setOutputs(outputs);
    	   submitjobs.setOutputBucket(outputbucket);
    	   //创建IClientProfile
    	   IClientProfile profile=DefaultProfile.getProfile(location.substring(4), accessKeyId, accessKeySecret);
    	   IAcsClient client=new DefaultAcsClient(profile);
    	   try {
    		   //获取管道
    		   SearchPipelineRequest searchPipeline=new SearchPipelineRequest();
    		   SearchPipelineResponse sarchPipelineResponse=client.getAcsResponse(searchPipeline);
    		   String pipelineid=sarchPipelineResponse.getPipelineList().get(0).getId();
    		   System.out.println("管道id="+pipelineid);
    		   //给管道赋值
    		   submitjobs.setPipelineId(pipelineid);
    		   SubmitJobsResponse response=client.getAcsResponse(submitjobs);
    		   List<JobResult> list= response.getJobResultList();
    		   JobResult jobResult=list.get(0);
    		   Job job=jobResult.getJob();
    		   Output output=job.getOutput();
    		   OutputFile outputfile=output.getOutputFile();
    		   url="http://"+outputfile.getBucket()+"."+outputfile.getLocation()+".aliyuncs.com/"+outputfile.getObject();
    		   String jobid=job.getJobId();
    		   System.out.println("转码任务id="+jobid);
    		   QueryJobListRequest queryjoblist=new QueryJobListRequest();
    		   queryjoblist.setJobIds(jobid);
    		   for(int i=0;i<2;i=0){
    			   QueryJobListResponse queryresponse=client.getAcsResponse(queryjoblist);
    			   String state=queryresponse.getJobList().get(0).getState();
    			   if(state.equals("Transcoding")||state.equals("Submitted")){
    				   Thread thread = Thread.currentThread();
    				   thread.sleep(5000);//暂停5秒后程序继续执行
    			   }else if(state.equals("TranscodeFail")||state.equals("TranscodeCancelled")){
    				   url="";
    			   }else {
    				   break;
    			   }
    			   
    		   }
    		  
    	} catch (Exception e) {
    		e.printStackTrace();
    		url="";
    	}
    	   return url;
      }
      /**
       * 上传模板
       * @param accessKeyId 
       * @param accessKeySecret
       * @param name 模板名称
       * @param container 模板容器
       * @param video 视频流配置
       * @param audio 音频流配置
       * @param transConfig 转码通用配置
       * @param muxConfig 封包配置
       * @return
     * @throws ClientException 
       */
      public static String addTemplate(String location,String accessKeyId,String accessKeySecret,String name,String container,String video,String audio) throws ClientException{
    	  String templateid="";
    	  if(location.equals("oss-cn-beijing")){
    		  //华北2
    		  DefaultProfile.addEndpoint("cn-beijing",
    	              "cn-beijing",
    	              "Mts",
    	              "mts.cn-beijing.aliyuncs.com");
    	  }else if(location.equals("oss-cn-shanghai")){
    		//华东2
    		  DefaultProfile.addEndpoint("cn-shanghai",
    	              "cn-shanghai",
    	              "Mts",
    	              "mts.cn-shanghai.aliyuncs.com");
    	  }else if(location.equals("oss-cn-hangzhou")){
    		  //华东1
    		  DefaultProfile.addEndpoint("cn-hangzhou",
    	              "cn-hangzhou",
    	              "Mts",
    	              "mts.cn-hangzhou.aliyuncs.com");
    	  }else if(location.equals("oss-cn-shenzhen")){
    		//华南1
    		  DefaultProfile.addEndpoint("cn-shenzhen",
    	              "cn-shenzhen",
    	              "Mts",
    	              "mts.cn-shenzhen.aliyuncs.com");
    	  }
    	 
    	  AddTemplateRequest template=new AddTemplateRequest();
    	  template.setName(name);
    	  if(!container.equals("")){
    		  template.setContainer(container);
    	  }
    	 if(!video.equals("")){
    		 template.setVideo(video);
    	 }
    	  if(!audio.equals("")){
    		  template.setAudio(audio);
    	  }
    	  //创建IClientProfile
    	   IClientProfile profile=DefaultProfile.getProfile(location.substring(4), accessKeyId, accessKeySecret);
    	   IAcsClient client=new DefaultAcsClient(profile);
    	   try {
    		   AddTemplateResponse templateResponse=client.getAcsResponse(template);
    		    templateid=templateResponse.getTemplate().getId();
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	   return templateid;
      }
      
      /**
       * 删除模板
       * @param location
       * @param accessKeyId
       * @param accessKeySecret
       * @param template_id
       * @throws ClientException
       */
      public static void deleteTemplate(String location,String accessKeyId,String accessKeySecret,String template_id) throws ClientException{
    	  if(location.equals("oss-cn-beijing")){
    		  //华北2
    		  DefaultProfile.addEndpoint("cn-beijing",
    	              "cn-beijing",
    	              "Mts",
    	              "mts.cn-beijing.aliyuncs.com");
    	  }else if(location.equals("oss-cn-shanghai")){
    		//华东2
    		  DefaultProfile.addEndpoint("cn-shanghai",
    	              "cn-shanghai",
    	              "Mts",
    	              "mts.cn-shanghai.aliyuncs.com");
    	  }else if(location.equals("oss-cn-hangzhou")){
    		  //华东1
    		  DefaultProfile.addEndpoint("cn-hangzhou",
    	              "cn-hangzhou",
    	              "Mts",
    	              "mts.cn-hangzhou.aliyuncs.com");
    	  }else if(location.equals("oss-cn-shenzhen")){
    		//华南1
    		  DefaultProfile.addEndpoint("cn-shenzhen",
    	              "cn-shenzhen",
    	              "Mts",
    	              "mts.cn-shenzhen.aliyuncs.com");
    	  }
    	  DeleteTemplateRequest deleterequest=new DeleteTemplateRequest();
    	  deleterequest.setTemplateId(template_id);
    	//创建IClientProfile
    	   IClientProfile profile=DefaultProfile.getProfile(location.substring(4), accessKeyId, accessKeySecret);
    	   IAcsClient client=new DefaultAcsClient(profile);
    	   try {
    		   client.getAcsResponse(deleterequest);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
      }
      /**
       * 删除视频
       * @param endpoint
       * @param accessKeyId
       * @param accessKeySecret
       * @param bucket 传入的bucket名称
       * @param url 视频播放地址
       */
      public void deleteVideo(String endpoint,String accessKeyId,String accessKeySecret,String bucket,String url){
    	  String filename=url.substring(url.lastIndexOf("/")+1);
    	  // 创建OSSClient实例
    	  OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    	  ossClient.deleteBucketCname(bucket, filename);
    	  // 关闭client
    	  ossClient.shutdown();
      }
      
      //直接使用MultipartFile上传到阿里云服务器  返回转码后的url
      public String getOSSUrl(MultipartFile file,String name,String template_id) throws IOException{
    		
    	 /*  Parament endpoint=paramentService.findByName("endpoint");
    		Parament accessKeyId=paramentService.findByName("accessKeyId");
    		Parament accessKeySecret=paramentService.findByName("accessKeySecret");
    		Parament bucket=paramentService.findByName("bucket");
    		Parament location=paramentService.findByName("location");*/
    	   OSSClient ossClient = new OSSClient(endpoint.getParament_value(), accessKeyId.getParament_value(), accessKeySecret.getParament_value());
    	   InputStream inputStream = file.getInputStream();
    	   ossClient.putObject(bucket.getParament_value(), name, inputStream);
    		VedioUtil vedioUtil = new VedioUtil();
    		String url ="";
    		try {
    			url = vedioUtil.transcoding(bucket.getParament_value(), location.getParament_value(), name, accessKeyId.getParament_value(), accessKeySecret.getParament_value(), template_id);
    		} catch (ClientException e) {
    			e.printStackTrace();
    		}
    		
    	return  url;
    }
      
      
      public static void main(String[] args) throws Throwable {
    	VedioUtil  a=new VedioUtil();
    	//LTAIB0RKGkeOgB4Q   5knJvFF6I8DPTsOnIQ61oYIdX7m8XE
    	a.uploadFile("http://oss-cn-beijing.aliyuncs.com", "key", "secret", "D:\00104.mp4", "bucket", "fileName", "oss-cn-beijing", "92e9239db5f468296b095d69706e09ed");
    }
    

      

  • 相关阅读:
    BigDecimal.setScale 处理java小数点
    JS判断用户手机是IOS还是Android
    h5 移动端 监听软键盘弹起、收起
    【java】查重类的实现
    MySQL ORDER BY IF() 条件排序
    版本回退
    Log4j 配置某个类中某个方法的输出日志到指定文件
    简单地实现文章的查重
    simhash算法
    mysql中 for update 使用
  • 原文地址:https://www.cnblogs.com/QuickSlow/p/13051450.html
Copyright © 2011-2022 走看看