上传视频到阿里云服务器
Posted quickslow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了上传视频到阿里云服务器相关的知识,希望对你有一定的参考价值。
######上传视频到阿里云服务器工具类
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"); }
以上是关于上传视频到阿里云服务器的主要内容,如果未能解决你的问题,请参考以下文章