导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>com.lmh</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>service_vod</artifactId>
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-sdk-vod-upload</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
</dependencies>
</project>
版本
<java.version>1.8</java.version>
<MindSchool.version>0.0.1-SNAPSHOT</MindSchool.version>
<mybatis-plus.version>3.1.1</mybatis-plus.version>
<!-- <mybatis-plus.version>3.0.5</mybatis-plus.version> 用不了低版本不支持在注解中这样写ew.customSqlSegment,只支持xml的自定义sql-->
<velocity.version>2.0</velocity.version>
<swagger.version>2.7.0</swagger.version>
<aliyun.oss.version>3.1.0</aliyun.oss.version>
<!-- <aliyun.oss.version>2.8.3</aliyun.oss.version>-->
<jodatime.version>2.10.1</jodatime.version>
<poi.version>3.17</poi.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<commons-io.version>2.6</commons-io.version>
<httpclient.version>4.5.1</httpclient.version>
<jwt.version>0.7.0</jwt.version>
<aliyun-java-sdk-core.version>4.3.3</aliyun-java-sdk-core.version>
<!-- <aliyun-sdk-oss.version>3.1.0</aliyun-sdk-oss.version>-->
<aliyun-java-sdk-vod.version>2.15.2</aliyun-java-sdk-vod.version>
<aliyun-java-vod-upload.version>1.4.11</aliyun-java-vod-upload.version>
<aliyun-sdk-vod-upload.version>1.4.12</aliyun-sdk-vod-upload.version>
<fastjson.version>1.2.28</fastjson.version>
<gson.version>2.8.2</gson.version>
<json.version>20170516</json.version>
<commons-dbutils.version>1.7</commons-dbutils.version>
<canal.client.version>1.1.0</canal.client.version>
<docker.image.prefix>zx</docker.image.prefix>
<cloud-alibaba.version>0.2.2.RELEASE</cloud-alibaba.version>
配置文件
server.port=8003
spring.application.name=service-vod
spring.profiles.active=dev
aliyun.vod.file.keyid=个人自己的阿里云
aliyun.vod.file.keysecret=个人自己的阿里云
spring.servlet.multipart.max-file-size=1024MB
spring.servlet.multipart.max-request-size=1024MB
创建utils
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class VodPropertiesUtils implements InitializingBean {
@Value("${aliyun.vod.file.keyid}")
private String keyId;
@Value("${aliyun.vod.file.keysecret}")
private String keySecret;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
@Override
public void afterPropertiesSet() throws Exception {
ACCESS_KEY_ID=keyId;
ACCESS_KEY_SECRET=keySecret;
}
}
创建InitVodClient
import com.aliyun.oss.ClientException;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
public class InitVodClient {
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai"; // 点播服务接入区域
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
}
编写接口的实现类
package com.lmh.vod.service.impl;
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;
import com.lmh.servicebase.exceptionhandler.LmhException;
import com.lmh.vod.service.VodService;
import com.lmh.vod.utils.InitVodClient;
import com.lmh.vod.utils.VodPropertiesUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.List;
@Service
public class VodServiceImpl implements VodService {
@Override
public String uploadAlyVideo(MultipartFile file) {
try {
String fileName=file.getOriginalFilename();
String title=fileName.substring(0,fileName.lastIndexOf("."));
InputStream inputStream= null;
inputStream = file.getInputStream();
UploadStreamRequest request = new UploadStreamRequest(VodPropertiesUtils.ACCESS_KEY_ID, VodPropertiesUtils.ACCESS_KEY_SECRET, title, fileName, inputStream);
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
String videoId=null;
if (response.isSuccess()) {
videoId=response.getVideoId();
} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
videoId=response.getVideoId();
}
return videoId;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//删除上传到阿里云的视频
@Override
public void deleteAlyVideo(String id) {
try {
//初始化对象
DefaultAcsClient client = InitVodClient.initVodClient(VodPropertiesUtils.ACCESS_KEY_ID, VodPropertiesUtils.ACCESS_KEY_SECRET);
//创建删除视频request对象
DeleteVideoRequest request = new DeleteVideoRequest();
//向request设置视频id
request.setVideoIds(id);
//调用初始化对象的方法实现删除
client.getAcsResponse(request);
}catch(Exception e) {
e.printStackTrace();
throw new LmhException(20001,"删除视频失败");
}
}
@Override
public void deleteAlyVideoList(List listVideoIds) {
try {
//初始化对象
DefaultAcsClient client = InitVodClient.initVodClient(VodPropertiesUtils.ACCESS_KEY_ID, VodPropertiesUtils.ACCESS_KEY_SECRET);
//创建删除视频request对象
DeleteVideoRequest request = new DeleteVideoRequest();
//videoIdList转换成1,2,3形式
String videoIds = StringUtils.join(listVideoIds.toArray(), ",");
//向request设置视频id
request.setVideoIds(videoIds);
//调用初始化对象的方法实现删除
client.getAcsResponse(request);
}catch(Exception e) {
e.printStackTrace();
throw new LmhException(20001,"删除视频失败");
}
}
}
调用的controller
package com.lmh.vod.controller;
import com.lmh.commonutils.R;
import com.lmh.vod.service.VodService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@Api(tags = "视频上传")
@RestController
@CrossOrigin
@RequestMapping("/eduVod")
public class VodController {
@Autowired
private VodService vodService;
@ApiOperation("视频上传阿里云")
@PostMapping("uploadAlyVideo")
public R uploadAlyVideo(MultipartFile file)
{
//返回上传后视频的id
String videoId=vodService.uploadAlyVideo(file);
return R.ok().data("videoId",videoId);
}
@DeleteMapping("deleteAlyVideo/{id}")
public R deleteAlyVideo(@PathVariable String id){
vodService.deleteAlyVideo(id);
return R.ok();
}
//删除多个视频
@DeleteMapping("deleteAlyVideoList")
public R deleteAlyVideoList(@RequestParam("videoIdList") List<String> listVideoIds){
vodService.deleteAlyVideoList(listVideoIds);
return R.ok();
}
}