谷粒学院 —— 10、课程管理:整合阿里云视频点播
创始人
2024-04-10 16:00:08
0

目录

1、创建模块

1.1、引入视频点播所需依赖

1.2、application.properties

1.3、启动类

2、实现视频上传

2.1、后端

2.1.1、创建常量类

2.1.2、上传视频到阿里云

2.2、配置 nginx

2.3、前端

2.3.1、上传视频组件

2.3.2、方法定义

3、视频删除

3.1、后端

3.1.1、初始化阿里云视频点播客户端

3.1.2、根据视频 ID 删除阿里云视频

3.2、前端

3.2.1、定义 API

3.2.2、定义组件方法


1、创建模块

在 service 下创建 service_vod 模块

1.1、引入视频点播所需依赖

    com.aliyunaliyun-java-sdk-core4.6.0com.aliyunaliyun-java-sdk-vod2.16.11com.alibabafastjson1.2.83com.aliyunaliyun-java-sdk-kms2.10.1com.aliyunaliyun-java-sdk-core4.5.1com.aliyun.ossaliyun-sdk-oss3.10.2com.aliyunaliyun-java-sdk-vod2.16.11com.alibabafastjson1.2.83org.jsonjson20170516com.google.code.gsongson2.8.2com.aliyunaliyun-sdk-vod-upload1.4.15com.baomidoumybatis-plus-boot-starter

1.2、application.properties

# 服务端口
server.port=8003
# 服务名
spring.application.name=service-vod# 环境设置:dev、test、prod
spring.profiles.active=dev#阿里云 vod
#不同的服务器,地址不同
aliyun.vod.file.keyid=accessKeyId
aliyun.vod.file.keysecret=accessKeySecret# 最大上传单个文件大小:默认1M
spring.servlet.multipart.max-file-size=1024MB
# 最大置总上传的数据大小 :默认10M
spring.servlet.multipart.max-request-size=1024MB

1.3、启动类

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) // 不加载数据库
@ComponentScan(basePackages = {"com.zyj"})  // 扫描包
public class VodApplication {public static void main(String[] args) {SpringApplication.run(VodApplication.class, args);}
}

2、实现视频上传

2.1、后端

2.1.1、创建常量类

@Component
public class ConstantVodUtils implements InitializingBean {public static String ACCESS_KEY_ID;public static String ACCESS_KEY_SECRET;@Value("${aliyun.vod.file.keyid}")private String accessKeyId;@Value("${aliyun.vod.file.keysecret}")private String accessKeySecret;@Overridepublic void afterPropertiesSet() throws Exception {ACCESS_KEY_ID = accessKeyId;ACCESS_KEY_SECRET = accessKeySecret;}
}

2.1.2、上传视频到阿里云

VodService

public interface VodService {/*** 上传视频到阿里云* @param file 视频文件* @return 上传后的视频ID*/String uploadVideo(MultipartFile file);}

VodServiceImpl

@Service
public class VodServiceImpl implements VodService {/*** 上传视频到阿里云* @param file 视频文件* @return 上传后的视频ID*/@Overridepublic String uploadVideo(MultipartFile file) {try {String accessKeyId = ConstantVodUtils.ACCESS_KEY_ID;String accessKeySecret = ConstantVodUtils.ACCESS_KEY_SECRET;String fileName = file.getName();   // 上传文件输入流String title = fileName.substring(0, fileName.lastIndexOf("."));;  // 阿里云的文件名InputStream inputStream = file.getInputStream();UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, 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;}}}

VodController

@RestController
@CrossOrigin
@RequestMapping("/vod/video")
@Api(description="阿里云视频点播微服务")
public class VodController {@Autowiredprivate VodService vodService;/*** 上传视频到阿里云* @param file 视频文件* @return*/@ApiOperation("上传视频到阿里云")@PostMapping("/uploadAliyunVideo")public R uploadAliyunVideo(MultipartFile file) {String videoId = vodService.uploadVideo(file);return R.ok().data("videoId", videoId);}}

2.2、配置 nginx

在 nginx.conf 中的 server{} 中配置

		location ~ /vod/ {           proxy_pass http://localhost:8003;}

在 server{} 的 server_name 下配置

client_max_body_size 1024m;

2.3、前端

2.3.1、上传视频组件

src\views\edu\course\chapter.vue

                上传视频
最大支持1G,
支持3GP、ASF、AVI、DAT、DV、FLV、F4V、
GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、
MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、
SWF、TS、VOB、WMV、WEBM 等视频格式上传

2.3.2、方法定义

首先在 data 中定义

                fileList: [],   //上传文件列表BASE_API: process.env.BASE_API // 接口API地址

然后定义方法

            /*** 上传视频成功调用的方法:赋值上传后视频的ID及文件名*/handleVodUploadSuccess(response, file, fileList) {this.video.videoSourceId = response.data.videoId;this.video.videoOriginalName = file.name;},// 试图上传多于一个视频handleUploadExceed(files, fileList) {this.$message.warning('想要重新上传视频,请先删除已上传的视频');},

3、视频删除

3.1、后端

3.1.1、初始化阿里云视频点播客户端

public class InitVodClient {/*** 初始化阿里云视频点播客户端* @param accessKeyId* @param accessKeySecret* @return* @throws ClientException*/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;}}

3.1.2、根据视频 ID 删除阿里云视频

官方文档:媒资管理

    /*** 根据视频ID删除阿里云中的视频* @param videoId* @return*/@DeleteMapping("/{videoId}")public R deleteAliyunVideo(@ApiParam(name = "videoId", value = "视频ID", required = true) @PathVariable String videoId) {try {// 初始化客户端DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);// 创建删除视频 request 对象DeleteVideoRequest request = new DeleteVideoRequest();// 像 request 对象设置视频IDrequest.setVideoIds(videoId);// 调用初始化对象方法实现删除client.getAcsResponse(request);return R.ok();} catch (Exception e) {e.printStackTrace();throw new GuliException(20001, "删除视频失败");}}

3.2、前端

3.2.1、定义 API

src\api\edu\video.js

    /*** 根据视频ID删除阿里云中的视频* @param {*} videoId * @returns */deleteAliyunVod(videoId) {return request({url: `/vod/video/${videoId}`,method: 'DELETE',})}

3.2.2、定义组件方法

            /*** 上传视频时删除列表中的视频*/beforeVodRemove(file, fileList) {return this.$confirm(`确定移除 ${file.name}?`);},/*** 根据视频ID删除阿里云中的视频*/handleVodRemove() {video.deleteAliyunVod(this.video.videoSourceId)// 删除成功.then(response => {// 提示信息this.$message({type: 'success',message: '删除视频成功!'});// 清空文件列表this.fileList = [];// 初始化小节中的视频ID和名称this.video.videoSourceId = '';this.video.videoOriginalName = '';})// 删除失败.catch(() => {this.$message({type: 'info',message: '已取消删除'});});} 

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...