?
?
1、依赖POM<dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.1</version> < </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vod</artifactId> <version>2.15.11</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-sdk-vod-upload</artifactId> <version>1.4.13</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20170516</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.10.1</version> </dependency> </dependencies> <repositories> <repository> <id>sonatype-nexus-staging</id> <name>Sonatype Nexus Staging</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories>2、配置文件(application.yml)
#服务端口 server: port: 8003 #服务名 spring: application: name: service-vod profiles: active: dev # 环境设置:dev、test、prod servlet: multipart: max-file-size: 1024MB # 最大上传单个文件大小,m默认1M max-request-size: 1024MB # 最大总上传的数据大小,默认10M #阿里云vod # 不同的服务器,地址不同 aliyun: vod: file: keyid: 自己的keyid keysecret: 自己的keysecret3、读取配置类
package com.zhz.vod.config.properties; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * @author zhouhengzhe * @Description: 视频读取配置类 * @date 2021/8/1下午4:57 */ @Component public class VodPropertiesConfiguration implements InitializingBean { @Value("${aliyun.vod.file.keyid}") private String keyid; @Value("${aliyun.vod.file.keysecret}") private String keysecret; public static String ACCESS_KEY_SECRET; public static String ACCESS_KEY_ID; @Override public void afterPropertiesSet() throws Exception { ACCESS_KEY_ID=keyid; ACCESS_KEY_SECRET=keysecret; } }4、初始化文件
package com.zhz.vod.utils; import com.aliyun.oss.ClientException; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.profile.DefaultProfile; /** * @author zhouhengzhe * @Description: 创建视频初始化连接对象 * @date 2021/8/1下午10:33 */ public class InitVodClient { public static DefaultAcsClient initAcsClient (String accessKeyId,String accessKeySecret) throws ClientException { String regionId="cn-shanghai";// 点播服务接入区域 DefaultProfile profile=DefaultProfile.getProfile(regionId,accessKeyId,accessKeySecret); DefaultAcsClient defaultAcsClient = new DefaultAcsClient(profile); return defaultAcsClient; } }5、Controller
package com.zhz.vod.controller; import com.zhz.common.utils.R; import com.zhz.vod.service.VodService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; /** * @author zhouhengzhe * @Description: 视频控制器 * @date 2021/8/1下午4:42 */ @RestController @RequestMapping("/eduvod//video") public class VodController { @Autowired private VodService vodService; //上传视频到阿里云 @PostMapping("uploadAliyunVideo") public R uploadAliyunVideo(MultipartFile file){ String videoId=vodService.uploadAliyunVideo(file); return R.ok().data("videoId",videoId); } }6、Service
package com.zhz.vod.service; import org.springframework.web.multipart.MultipartFile; import java.util.List; /** * @author zhouhengzhe * @Description: 视频服务处理接口 * @date 2021/8/1下午4:46 */ public interface VodService { /** * 上传视频到阿里云 * @param file 文件对象 * @return 上传的视频id * @date 2021/8/1 下午4:51 * @author zhouhengzhe */ String uploadAliyunVideo(MultipartFile file); /** * 根据id删除多个视频 * @param videoIdList 视频id集合 * @return * @date 2021/8/1 下午6:14 * @author zhouhengzhe */ void removeMoreAlyVideo(List videoIdList); }7、impl
package com.zhz.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.exceptions.ClientException; import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest; import com.zhz.servicebase.execptionhandler.GuliException; import com.zhz.vod.config.properties.VodPropertiesConfiguration; import com.zhz.vod.service.VodService; import com.zhz.vod.utils.InitVodClient; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * @author zhouhengzhe * @Description: 视频服务处理实现类 * @date 2021/8/1下午4:47 */ @Service @Slf4j public class VodServiceImpl implements VodService { /** * 上传视频到阿里云 * * @param file 文件对象 * @return 上传的视频id * @date 2021/8/1 下午4:51 * @author zhouhengzhe */ @Override public String uploadAliyunVideo(MultipartFile file) { try { //accessKeyId, accessKeySecret //fileName:上传文件原始名称 // 01.03.09.mp4 String originalFilename = file.getOriginalFilename(); //title:上传之后显示名称 01.03.09 String title = originalFilename.substring(0, originalFilename.lastIndexOf(".")); //inputStream:上传文件输入流 InputStream inputStream = file.getInputStream(); //上传文件请求对象 UploadStreamRequest uploadStreamRequest = new UploadStreamRequest(VodPropertiesConfiguration.ACCESS_KEY_ID,VodPropertiesConfiguration.ACCESS_KEY_SECRET,title,originalFilename,inputStream); UploadVideoImpl uploadVideo=new UploadVideoImpl(); UploadStreamResponse uploadStreamResponse=uploadVideo.uploadStream(uploadStreamRequest); //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 return uploadStreamResponse.getVideoId(); }catch (Exception e){ log.info("视频上传异常:{}",e.getMessage()); return null; } } /** * 根据id删除多个视频 * * @param videoIdList 视频id集合 * @return * @date 2021/8/1 下午6:14 * @author zhouhengzhe */ @Override public void removeMoreAlyVideo(List videoIdList) { try { //初始化对象 DefaultAcsClient defaultAcsClient = InitVodClient.initAcsClient(VodPropertiesConfiguration.ACCESS_KEY_ID, VodPropertiesConfiguration.ACCESS_KEY_SECRET); //创建删除视频request对象 DeleteVideoRequest deleteVideoRequest = new DeleteVideoRequest(); //videoIdList值转换成 1,2,3 String videoIds = StringUtils.join(videoIdList.toArray(), ","); //向request设置视频id deleteVideoRequest.setVideoIds(videoIds); //调用初始化对象的方法实现删除 defaultAcsClient.getAcsResponse(deleteVideoRequest); } catch (ClientException e) { log.info("根据id删除多个视频删除异常:{}",e.getMessage()); throw new GuliException(20001,"删除视频失败"); } } public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("11"); list.add("22"); list.add("33"); // 11,22,33 String join = StringUtils.join(list.toArray(), ","); System.out.println(join); } }
?
原文:https://blog.51cto.com/u_14962799/3274320