【Spring Boot 20】Spring Boot + Vue 整合阿里云视频点播

com.google.code.gson

gson

joda-time

joda-time

这里需要注意的是 aliyun-java-sdk-vod 飘红问题,aliyun-java-sdk-vod 没有开源,所以不能直接在pom文件中直接引用依赖。

通常情况下:

1、下载aliyun-sdk-vod-upload.jar

2、将测试样例解压,进入lib目录下,在命令行执行下面的命令

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.12 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.12.jar

在pom文件中引入该依赖即可

com.aliyun

aliyun-sdk-vod-upload

1.4.12

但有的时候确实不好使,小编就是这样

我的解决办法(直接导入jar包!!!):

(二)Spring Boot 后端部分


1、配置文件application.properties

服务端口

server.port=8003

服务名

spring.application.name=service-vod

环境设置:dev、test、prod

spring.profiles.active=dev

#阿里云 vod

#不同的服务器,地址不同

aliyun.vod.file.keyid=LTAI4GJ2dfYZAmAusqM4qwti

aliyun.vod.file.keysecret=JwctWzF9sxACGAX7FjZ5wd8ewvjCPl

最大上传单个文件大小:默认1M

spring.servlet.multipart.max-file-size=1024MB

最大置总上传的数据大小 :默认10M

spring.servlet.multipart.max-request-size=1024MB

2、controller

package com.atguigu.vod.controller;

import com.aliyuncs.DefaultAcsClient;

import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;

import com.atguigu.commonutils.R;

import com.atguigu.commonutils.exceptionhandler.GuliException;

import com.atguigu.vod.Utils.ConstantVodUtils;

import com.atguigu.vod.Utils.InitVodCilent;

import com.atguigu.vod.service.VodService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController

@RequestMapping(“/eduvod/video”)

@CrossOrigin

public class VodController {

@Autowired

private VodService vodService;

//上传视频到阿里云

@PostMapping(“uploadAlyiVideo”)

public R uploadAlyiVideo(MultipartFile file) {

//返回上传视频id

String videoId = vodService.uploadVideoAly(file);

return R.Ok().data(“videoId”,videoId);

}

//根据视频id删除阿里云视频

@DeleteMapping(“removeAlyVideo/{id}”)

public R removeAlyVideo(@PathVariable String id) {

try {

//初始化对象

DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);

//创建删除视频request对象

DeleteVideoRequest request = new DeleteVideoRequest();

//向request设置视频id

request.setVideoIds(id);

//调用初始化对象的方法实现删除

client.getAcsResponse(request);

return R.Ok();

}catch(Exception e) {

e.printStackTrace();

throw new GuliException(20001,“删除视频失败”);

}

}

//删除多个阿里云视频的方法

//参数多个视频id List videoIdList

@DeleteMapping(“delete-batch”)

public R deleteBatch(@RequestParam(“videoIdList”) List videoIdList) {

vodService.removeMoreAlyVideo(videoIdList);

return R.Ok();

}

}

3、service

package com.atguigu.vod.service;

import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface VodService {

//上传视频到阿里云

String uploadVideoAly(MultipartFile file);

void removeMoreAlyVideo(List videoIdList);

}

package com.atguigu.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.atguigu.commonutils.R;

import com.atguigu.commonutils.exceptionhandler.GuliException;

import com.atguigu.vod.Utils.ConstantVodUtils;

import com.atguigu.vod.Utils.InitVodCilent;

import com.atguigu.vod.service.VodService;

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;

@Service

public class VodServiceImpl implements VodService {

@Override

public String uploadVideoAly(MultipartFile file) {

try {

//accessKeyId, accessKeySecret

//fileName:上传文件原始名称

// 01.03.09.mp4

String fileName = file.getOriginalFilename();

//title:上传之后显示名称

String title = fileName.substring(0, fileName.lastIndexOf(“.”));

//inputStream:上传文件输入流

InputStream inputStream = file.getInputStream();

UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESS_KEY_ID,ConstantVodUtils.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 removeMoreAlyVideo(List videoIdList) {

try {

//初始化对象

DefaultAcsClient client = InitVodCilent.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);

//创建删除视频request对象

DeleteVideoRequest request = new DeleteVideoRequest();

//videoIdList值转换成 1,2,3

String videoIds = StringUtils.join(videoIdList.toArray(), “,”);

//向request设置视频id

request.setVideoIds(videoIds);

//调用初始化对象的方法实现删除

client.getAcsResponse(request);

}catch(Exception e) {

e.printStackTrace();

throw new GuliException(20001,“删除视频失败”);

}

}

}

4、utils

package com.atguigu.vod.Utils;

import com.aliyun.oss.ClientException;

import com.aliyuncs.DefaultAcsClient;

import com.aliyuncs.profile.DefaultProfile;

public class InitVodCilent {

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.atguigu.vod.Utils;

import org.springframework.beans.factory.InitializingBean;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

@Component

public class ConstantVodUtils 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;

}

}

(三)Vue前端部分


1、template部分

<el-upload

:on-success=

“handleVodUploadSuccess”

:on-remove=“handleVodRemove”

:before-remove=“beforeVodRemove”

:on-exceed=“handleUploadExceed”

:file-list=“fileList”

:action=“BASE_API+‘/eduvod/video/uploadAlyiVideo’”

:limit=“1”

class=“upload-demo”>

上传视频

最大支持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、data部分

data() {

return {

video: {

title: ‘’,

sort: 0,

free: 0,

videoSourceId: ‘’,

videoOriginalName:‘’//视频名称

},

fileList: [],//上传文件列表

BASE_API: process.env.BASE_API // 接口API地址

}

},

3、methods部分

methods:{

//点击确定调用的方法

handleVodRemove() {

//调用接口的删除视频的方法

video.deleteAliyunvod(this.video.videoSourceId)

.then(response => {

//提示信息

this.$message({
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

前15.PNG

前16.PNG

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处免费获取

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-ym9MbBds-1712249656752)]

[外链图片转存中…(img-WUC3K9dc-1712249656753)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-lNq6b2tC-1712249656753)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

[外链图片转存中…(img-S0n9Ii6L-1712249656754)]

[外链图片转存中…(img-OC1tQmUo-1712249656754)]

由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处免费获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值