课程管理-添加小节上传视频(后端) | 学习笔记

简介: 简介:快速学习课程管理-添加小节上传视频(后端)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-添加小节上传视频(后端)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/667/detail/11405


课程管理-添加小节上传视频(后端)


内容介绍:

一、引入依赖

二、创建 application 配置文件

三、创建启动类

四、创建 controller service

(1)Controller

(2)Service

把前端和后端的服务整合起来 做一个分析,在后面操作的时候,需要把前端后端都启动。启动之后登陆添加课程中首先第一步,加课程的基本信息,随便添加,再加上分类,要不在课程大纲里可以添加一个章节123,添加小节。

增加课时标题第一节 Java 入门语法,里面课时排序1,里面有一个上传视频,所以在添加课时,添加小节的时候 可以实现一个视频上传的功能,可以将视频传入到阿里中去,不是存视频的地址,而是保存视频上传的 ID 上传之后会返回 ID,所以把ID 保存,根据可以得到凭证或者地址等相关信息。

先写接口,在整合前端,把前端写出来。首先 接口先完成,Service vod 中进行开发,把视频部分全部写入 vod 中。

 

一、引入依赖

版本已经知道,在 vod 的子模块中 把依赖直接引进来,然后在课件中直接复制。

有一个细节,他的版本不能乱写。版本有相关的对应关系,vod的版本不能乱对应,可以到官网上查询对应的版本,引入依赖,依赖中的位置不同的版本。

 

二、创建application配置文件

D的 resource 里面有一个application properties 文件,然后把文件中的配置复制过来,他的内容中第一个是服务端口号,vod 现在变成8003,下面有他的 ID 和密钥,复制 ID 和密钥进行使用。

下面创建代码,Java 里面建一个包,Com. atguigu.vod,完成之后先创建一个启动类,比如叫 vodapplication,启动类的上面添加一个注解 是springbootapplication,

里面有一个 DataSourceAutoConfiguration. class,因为在 vod 中只是做视频的操作,并没有操作数据库,数据库在 abo 中,所以没有引入数据库的位置,有可能会报错。

这个代码就是默认不去做数据库的操作,引入依赖 加完之后,包括自动填充 加上一个扫描规则,这是关于启动类的创建。

 

三、创建启动类

SpringBootApplication(exclude= DataSourceAut. class

eComponentScan(basePackages =("com. atguig)

public class VodApplication

public static void main(String[]args)

SpringApplication. run(VodApplication. class, args):

四、 创建 controller service

(1)Controller

@RestController

@RequestMapping("/eduvod/video") public class VodController{

}

首先建一个包创建 control,名字叫 vodcontrol,在上面加上一个注解,

二个是 request mapping 指定路径,路径指定的名字叫 eduvod/video,之后创建service,先来一个包,有一个 interface 这样的接口 叫 vod service,后写上实现类vod servic,在直接实现接口,别忘在 service 上面加上注解,最后在 control 里面把方法写一下,方法就是上传视频的方法,或者上传到阿里云的方法。

上传提交的方式都是 post 提交,写一个 post 名字,最后 return 一个值,不要报错,因为现在需要做上传视频,在添加小节的位置,需要传入本地视频。

在方法中做到的第一部分,需要获取上传的文件,Multiplefile 获得上传文件,过程都写到 service 中 加一个 private 等,通过 service 就可以把功能实现。

在里面把文件传过来,传视频之后会返回视频 ID,最后把 ID 需要加到数据表中。

∥上传视频到阿里云

EPostMapping ("uploadAlyivideo")

public R uploadAlyiVideo(MultipartFile file){

/返回上传视频id

String videold= vodService. uploadvideoAly(file):

return R. ok() data("videoId", videoId)

(2)Service

写完之后写 service ,先创建一个接口。

来到实现内容,实现出来,找到官方代码进行实现,之前用本地文件上传接口,用其他的也可以,网络流不合适,文件流也不合适,流式上传进行实现,这个代码把功能写出来,直接复制。

里面的注释去掉,保留最基本的结构,手动引入依赖,引入之后需要传入几个参数,按照之前写过的方式读配置文件,一个和第二个是 ID 和密钥,Inputstream 是上传文件 输入流,Filename 是上传文件原始名称,title 是上传里面显示的名称,流必须要有,现在是这几个重要的参数。

下面的结构一样,直接调用方法,通过 response 得到视频 ID。跟增加一个变量叫做video ID,在里面做一个赋值,不影响上传。

把 video ID 做一个 return 这样方法和结构都显示出来了,先写ID和密钥的参数,用之前的方式,用 Service 的注解读取配置文件,再写一个常量,向里面做一个赋值。

写一个包,叫做 utils,梦见一个工具类 叫做 constant VodUtils,之后实现接口Init,在类上面加上注解,县里面的方法,实现之后,通过注解读取刚才配置文件中的内容 ID 和密钥。

一个是 too string 第二个是密钥,在注解里面加上表达式,把名字复制过来,第二个名字密钥,之后加上常量,做赋值即可。

这样就把工具类完成了:

VodServicelmpl java ConstantPropertiesUtijava Constan

eValue("${aliyun. vod. file. keyid]")

private String keyid:

EValue ("{aliyun. vod. file. keysecret}")

private String keysecret:

public static String ACCESS KEY SECRET:

public static String ACCESS_KEY_ ID:

cOverride

public void afterPropertiesSet() throws Exception

ACCESS KEY ID keyid:

ACCESS KEY SECRET keysecret;

然后把值再用一下,第一个值取里面的 ID,第二个取密钥,之后把里面的值定义一下。

在 file 里面有他的实际名字,流的位置有异常,加上 catch,捕获 exception。

名称可以和 fire name 起一个名称,这名称可能叫做01.mp4,现在想直接取名称,不带后缀值,上01,不带 mp4。根据点的位置做一个截取,方法很简单,直接复制。

用 substring 做个截取,文件名字可以这么写,得到最后一个点的位置 得到01.03.09的值,title 就写这个,这是几个参数,最终上传接口完成,然后做一个测试。

现在接口完成,最后做一个最终的测试,看一下效果,加上注解,演示跨域,启动服务器测试。

//01.03.09.mp4

String fileName=filegetOriginalFilenameO;//title:上传之后显示名称

String title=fileName.substring(o,fileName.lastIndex0f(."))//inputStream:上传文件输入流

InputStream inputStream=file.getInputStream));

UploadStreamRequest request=new UploadStreamRequest

ConstantVodUtils.ACCESS KEYID,ConstantVodUtils. ACCESS KEY SECRET title,fileName, inputStream);

UploadVideoImpl uploader=new UploadVideoImpl())

UploadStreamResponseresponse =uploader.uploadStream(request)

String videoId=null;

if(responseisSuccess()){

videoId=response.getVideoId(;

else {

videoId =response. getVideoId();

return videoId;

}

相关文章
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
1076 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
SQL 关系型数据库 MySQL
"告别蜗牛速度!解锁批量插入数据新姿势,15秒狂插35万条,数据库优化就该这么玩!"
【8月更文挑战第11天】在数据密集型应用中,高效的批量插入是性能优化的关键。传统单条记录插入方式在网络开销、数据库I/O及事务处理上存在明显瓶颈。批量插入则通过减少网络请求次数和数据库I/O操作,显著提升效率。以Python+pymysql为例,通过`executemany`方法,可实现在15秒内将35万条数据快速入库,相较于传统方法,性能提升显著,是处理大规模数据的理想选择。
687 5
|
Java Spring
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
1468 0
|
Web App开发 机器学习/深度学习 数据安全/隐私保护
|
6天前
|
弹性计算 人工智能 安全
云上十五年——「弹性计算十五周年」系列客户故事(第二期)
阿里云弹性计算十五年深耕,以第九代ECS g9i实例引领算力革新。携手海尔三翼鸟、小鹏汽车、微帧科技等企业,实现性能跃升与成本优化,赋能AI、物联网、智能驾驶等前沿场景,共绘云端增长新图景。
|
12天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
4天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
11天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知