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

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

开发者学堂课程【微服务+全栈在线教育实战项目演练(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| 保证模型轻量化的同时,提升网络的性能表现
1059 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
SQL 关系型数据库 MySQL
"告别蜗牛速度!解锁批量插入数据新姿势,15秒狂插35万条,数据库优化就该这么玩!"
【8月更文挑战第11天】在数据密集型应用中,高效的批量插入是性能优化的关键。传统单条记录插入方式在网络开销、数据库I/O及事务处理上存在明显瓶颈。批量插入则通过减少网络请求次数和数据库I/O操作,显著提升效率。以Python+pymysql为例,通过`executemany`方法,可实现在15秒内将35万条数据快速入库,相较于传统方法,性能提升显著,是处理大规模数据的理想选择。
567 5
|
11月前
|
Java Spring
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
【亲测有效完结bug】org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exce
1421 0
|
Web App开发 机器学习/深度学习 数据安全/隐私保护
|
3天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1101 0
|
2天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
461 9
|
12天前
|
人工智能 运维 安全
|
11天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
3天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
296 0