24.12.27 SpringMVCDay02

    • enctype必须是 multipart/form-data
    <form action="/mvc/book/doUpload1" method="post" enctype="multipart/form-data"><p><input type="file" name="img_url"></p><p><input type="submit" value="上传"></p></form>
    @AutowiredHttpServletRequest request;@PostMapping("/doUpload1")@ResponseBodypublic String doUpload1() throws ServletException, IOException {//获取Request对象//getPart(页面表单提交中,获取name=img_url的值Part part = request.getPart("img_url");//文件存哪里//D:\webFolder\mvcdemo1\target\mvcdemo\String realPath = request.getServletContext().getRealPath("/");//D:\webFolder\mvcdemo1\target\mvcdemo\/imgs/String basePath = realPath + "/imgs/";System.out.println(basePath);//文件夹是否存在File baseFile = new File(basePath);if (!baseFile.exists()){baseFile.mkdirs();}//文件名String fileName = part.getSubmittedFileName();part.write(basePath + fileName);return "success";}

多文件

multiple属性

<form action="/mvc/book/doUpload2" method="post" enctype="multipart/form-data"><p><input type="file" name="img_url" multiple></p><p><input type="submit" value="上传"></p></form>
@PostMapping("/doUpload2")@ResponseBodypublic String doUpload2() throws ServletException, IOException {//获取 所有的文件Collection<Part> parts = request.getParts();String realPath = request.getServletContext().getRealPath("/imgs/");System.out.println(realPath);File realFile = new File(realPath);if (!realFile.exists()){realFile.mkdirs();}parts.forEach(part -> {String fileName = part.getSubmittedFileName();try {part.write(realPath +  fileName);} catch (IOException e) {//不处理异常,仅仅是打印看看e.printStackTrace();}});return "success";}

MVC方式上传文件

  • 引入依赖
    <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>1.4</version></dependency>
  • mvc.xml
    <!--上传文件的配置--><bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"/></bean>

单文件

    //img_url表单提交中的name属性@PostMapping("/doUpload3")@ResponseBodypublic String doUpload3(MultipartFile img_url) throws IOException {//文件名String fileName = img_url.getOriginalFilename();//获取保存路径String realPath = request.getServletContext().getRealPath("/imgs/");System.out.println(realPath);File realFile = new File(realPath);if (!realFile.exists()){realFile.mkdirs();}//文件对象.transferTo(存储的位置+文件名)img_url.transferTo(new File(realPath + fileName));return "success";}

多文件

    @PostMapping("/doUpload4")@ResponseBodypublic String doUpload4(MultipartFile[] img_url) throws IOException {if (img_url.length > 0){for (MultipartFile file : img_url){file.transferTo(new File(getFileName(file)));}}return "success";}private String getFileName(MultipartFile file){//文件名String fileName = file.getOriginalFilename();//获取保存路径String realPath = request.getServletContext().getRealPath("/imgs/");File realFile = new File(realPath);if (!realFile.exists()){realFile.mkdirs();}return realPath + fileName;}

文件下载

默认情况下,mvc框架,无法识别静态资源文件的

超链接下载

<ul><li><a href="/mvc/save/test1.docx">word文档</a></li><li><a href="/mvc/save/test2.jpg">图片</a></li><li><a href="/mvc/save/test3.pdf">PDF</a></li><li><a href="/mvc/save/test4.rar">压缩文件</a></li><li><a href="/mvc/save/test5.xlsx">Excel</a></li></ul>

如果这个文件,浏览支持,可以打开,就会直接在浏览器中打开,不进行下载

如果这个文件,浏览器无法打开,跳出下载页面

好处:简单,易学.写一个url地址超链接即可

坏处:仅能让部分格式的文件下载

流下载

这个下载 ,要经过服务器,让服务器写出文件流 给浏览器,触发下载

  • ResponseEntity
    @AutowiredHttpServletRequest request;@GetMapping("/test1")public ResponseEntity<byte[]> download(String name) throws IOException {//获取文件路径String realPath = request.getServletContext().getRealPath("/save/");//文件的全路径String allPath = realPath + name;//获取下载需要的文件流信息FileInputStream inputStream = new FileInputStream(allPath);//获取流的数组byte[] buffer = new byte[inputStream.available()];//读取inputStream.read(buffer);//文件下载的时候,显示的名字,需要改文件名了,再修改//设置响应的头信息,告诉浏览器,返回的是文件HttpHeaders httpHeaders = new HttpHeaders();//设置响应的头信息,访问文件名中文乱码httpHeaders.setContentDispositionFormData("attachment", URLEncoder.encode(name,"utf-8"));ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(buffer,httpHeaders, HttpStatus.OK);return responseEntity;}
  • HttpServletResponse
    @AutowiredHttpServletResponse response;@GetMapping("/test2")public void  download2(String name) throws FileNotFoundException, UnsupportedEncodingException {//获取文件路径String realPath = request.getServletContext().getRealPath("/save/");//文件的全路径String allPath = realPath + name;//判断文件是否存在File file = new File(allPath);if (!file.exists()){throw new FileNotFoundException(name+"文件不存在");}//代码能执行到这一行,说明文件肯定存在//编码格式是utf-8的文件名String encodeFileName = URLEncoder.encode(name, StandardCharsets.UTF_8.toString());//设置头信息 headerresponse.setHeader("Content-Disposition","attachment;filename*=UTF-8''"+encodeFileName);//使用 try--with --resources 关闭流try(FileInputStream inputStream = new FileInputStream(file);OutputStream outputStream = response.getOutputStream()){IOUtils.copy(inputStream,outputStream);outputStream.flush();} catch (IOException e) {throw new RuntimeException(e);}}

异常处理

  • 异常页面
    • 修改web.xml (会直接跳到这个页面)
  <error-page><location>/error.jsp</location></error-page>
  • 异常类
@Component
public class TestController implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest request,HttpServletResponse response,Object o,Exception e) {//产生异常的时候,调用这个方法System.out.println(e.getMessage());e.printStackTrace();//配置返回值ModelAndView mv = new ModelAndView();mv.setViewName("game/success");//会直接跳到 webapp下的这个页面return mv;}
}
  • @RestControllerAdvice

用来处理指定异常(自定义异常类)

@RestControllerAdvice
public class JavasmExceptionAdvice {//当ArithmeticException被抛出来的时候,执行当前方法@ExceptionHandler(ArithmeticException.class)public String f1(ArithmeticException e){System.out.println("算术异常");e.printStackTrace();//返回值,会代替原有方法的返回内容return e.getMessage();}//当抛出JavasmException的时候,执行当前方法@ExceptionHandler(JavasmException.class)public Map<String,Object> f2(JavasmException e){Map<String,Object> map = new HashMap<>();map.put("code",500);map.put("msg","自定义异常"+e.getMessage());return map;}
}
public class JavasmException extends RuntimeException{public JavasmException() {}public JavasmException(String message) {super(message);}
}

拦截器

拦截器 和 过滤器 的区别是什么?

过滤器:web容器,不属于框架,请求进入tomcat之后,先经过的就是过滤器

拦截器:属于spring容器,springweb中,属于 容器的servlet,相当于,Servlet内部的请求拦截

public class TestInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("pre--xxx之前----在Controller的方法 执行之前");//返回的数据是Boolean类型,返回true,允许进入下一层(可能是下一个拦截器,也可能是Controller)//返回false????//response.getWriter().write("xxxx");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("post--xxx之后-----被访问的方法 执行结束之后,执行");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("页面渲染成功之后执行");}
}
案例登录拦截public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//只有登录的用户才能访问系统HttpSession session = request.getSession();Object user = session.getAttribute("user");//登录的数据存在session,在这里取出if (user != null){//已经登录了return true;}Map<String,Object> map = new HashMap<>();map.put("code",2001);map.put("msg","未登录");String s = JSON.toJSONString(map);response.setContentType("application/json;charset=utf-8");//预防乱码PrintWriter writer = response.getWriter();writer.write(s);writer.flush();writer.close();return false;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--    开启包扫描--><context:component-scan base-package="com.javasm"/><!--代替适配器等配置--><mvc:annotation-driven/><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--跳转的jsp页面,统一添加前缀--><property name="prefix" value="/WEB-INF/"/><!--后缀--><property name="suffix" value=".jsp"/></bean><!--静态资源文件放过--><mvc:default-servlet-handler/><!--上传文件的配置--><bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"/></bean><!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--被拦截的路径--><!--所有以/game开头的请求,都要经过拦截器--><mvc:mapping path="/game/**"/><mvc:mapping path="/player/**"/><!--在包含的路径中,排除其中的某些路径--><mvc:exclude-mapping path="/game/test1"/><!--拦截器类--><bean class="com.javasm.interceptor.TestInterceptor"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/>                            //拦截页面的范围<mvc:exclude-mapping path="/game/test1"/>            //不会被拦截的页面<mvc:exclude-mapping path="/login/**"/><bean class="com.javasm.interceptor.LoginInterceptor"/>  //拦截所在的位置</mvc:interceptor></mvc:interceptors></beans>

数据类型转换

Field error in object 'bookModel' on field 'ctime': rejected value [2024-12-27]; codes [typeMismatch.bookModel.ctime,typeMismatch.ctime,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [bookModel.ctime,ctime]; arguments []; default message [ctime]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'ctime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2024-12-27'; nested exception is java.lang.IllegalArgumentException]]

表单提交的是String类型数据,尝试自动转成Date类型,失败了

    @PostMapping("/doAdd2")@ResponseBodypublic Date doAdd2(String name,@DateTimeFormat(pattern = "yyyy-MM-dd") Date ctime){return ctime;}
    @PostMapping("/doAdd")@ResponseBodypublic BookModel doAdd(BookModel book){return book;}@Data
public class BookModel {private Integer id;private String name;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date ctime;
}

自定义参数类型转换器

SimpleDate转换

public class StringToDate implements Converter<String, Date> {@Overridepublic Date convert(String s) {//传入的参数,等待被转换的2024-12-27 字符串System.out.println(s);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");Date date = null;try {date = simpleDateFormat.parse(s);} catch (ParseException e) {throw new RuntimeException(e);}return date;}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--    开启包扫描--><context:component-scan base-package="com.javasm"/><!--代替适配器等配置--><mvc:annotation-driven conversion-service="conversionJavasmService"/><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!--跳转的jsp页面,统一添加前缀--><property name="prefix" value="/WEB-INF/"/><!--后缀--><property name="suffix" value=".jsp"/></bean><!--静态资源文件放过--><mvc:default-servlet-handler/><!--上传文件的配置--><bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"/></bean><!--配置拦截器--><mvc:interceptors><mvc:interceptor><!--被拦截的路径--><!--所有以/game开头的请求,都要经过拦截器--><mvc:mapping path="/game/**"/><mvc:mapping path="/player/**"/><!--在包含的路径中,排除其中的某些路径--><mvc:exclude-mapping path="/game/test1"/><!--拦截器类--><bean class="com.javasm.interceptor.TestInterceptor"/></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/game/test1"/><mvc:exclude-mapping path="/login/**"/><bean class="com.javasm.interceptor.LoginInterceptor"/></mvc:interceptor></mvc:interceptors><!--消息类型转换--><bean id="conversionJavasmService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.javasm.convert.StringToDate"/></set></property></bean></beans>

localdateTime

Field error in object 'bookModel' on field 'utime': rejected value [2024-12-27T16:08]; codes [typeMismatch.bookModel.utime,typeMismatch.utime,typeMismatch.java.time.LocalDateTime,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [bookModel.utime,utime]; arguments []; default message [utime]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.time.LocalDateTime' for property 'utime'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.time.LocalDateTime] for value '2024-12-27T16:08'; nested exception is java.lang.IllegalArgumentException: Parse attempt failed for value [2024-12-27T16:08]]]
public class StringToDateTime implements Converter<String, LocalDateTime> {@Overridepublic LocalDateTime convert(String s) {return LocalDateTime.parse(s, DateTimeFormatter.ISO_LOCAL_DATE_TIME);}
}
    <!--消息类型转换--><bean id="conversionJavasmService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"><property name="converters"><set><bean class="com.javasm.convert.StringToDate"/><bean class="com.javasm.convert.StringToDateTime"/></set></property></bean>

JSON数据(用JSON传输数据)

  • 引入依赖
    <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.11.2</version></dependency>
  • 加注解
@GetMapping ("/doAdd3")
@ResponseBody
public BookModel doAdd3(@RequestBody BookModel book){System.out.println(book);return book;
}
@Data
public class BookModel {private Integer id;private String name;//@DateTimeFormat(pattern = "yyyy-MM-dd")private Date ctime;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime utime;
}
{"id":1001,"name":"<刑法>","ctime":"2024-12-27","utime":"2024-12-27 16:09:30"
}
json时间,可以写2024-01-27 09:09:09
不能写 2024-1-27 9:9:9

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65352.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven核心概念总结

Maven 介绍 Maven 官方文档是这样介绍的 Maven 的&#xff1a; Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a projects build, reporting and documentation from a ce…

Unity 读Excel,读取xlsx文件解决方案

Unity读取表格数据 效果&#xff1a; 思路&#xff1a; Unity可以解析Json&#xff0c;但是读取Excel需要插件的帮助&#xff0c;那就把这个功能分离开&#xff0c;读表插件就只管读表转Json&#xff0c;Unity就只管Json解析&#xff0c;中间需要一个存储空间&#xff0c;使用…

PyQt + OpenCV综合训练

一、PyQt OpenCV 图像处理应用设计 创建一个 PyQt 应用程序&#xff0c;该应用程序能够&#xff1a; ①使用 OpenCV 加载一张图像。 ②在 PyQt 的窗口中显示这张图像。 ③提供四个按钮&#xff08;QPushButton&#xff09;&#xff1a; - 一个用于将图像转换为灰度图 - …

React中最优雅的异步请求

给大家分享在React19中使用useSuspense处理异步请求为什么是被认为最优雅的解决方案 一. 传统方案 解决异步请求的方案中&#xff0c;我们要处理至少两个最基本的逻辑 正常的数据显示数据加载的UI状态 例如&#xff1a; export default function Index(){const [content, …

数据库高安全—openGauss安全整体架构安全认证

openGauss作为新一代自治安全数据库&#xff0c;提供了丰富的数据库基础安全能力&#xff0c;并逐步完善各类高阶安全能力。这些安全能力涵盖了访问登录认证、用户权限管理、审计与追溯及数据安全隐私保护等。本章节将围绕openGauss安全机制进行源码解读&#xff0c;以帮助数据…

linux-23 文件管理(一)创建文件touch,stat

那接下来看看文件的创建和删除&#xff0c;那我们怎么去创建一个文件&#xff1f;各种方式都能实现&#xff0c;当然&#xff0c;这里先说一说&#xff0c;就像mkdir创建空目录一样&#xff0c;我们如何创建一个空文件&#xff1f;创建空文件其实很简单&#xff0c;有一个命令歪…

Linux 基本指令

目录 1.常见指令 1.1 ls指令 1.2 pwd指令 1.3 cd指令 1.4 touch指令 1.5 mkdir指令 1.6 rm和rmdir指令 1.7 man指令 1.8 cp指令 1.9 mv指令 ​编辑 1.10 cat指令 1.11 more指令 1.12 less指令 1.13 head指令 1.14.tail指令 1.15 时间相关的指令 1.16 cal…

金蝶V10中间件的使用

目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包&#xff1a;AAS-V10.zip程序包&#xff1a;***.war 搭建过程 将安装包上传至服务器opt目录下&#xff0c;官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”&#xff1b;解压安装包(解…

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…

Python数据可视化小项目

英雄联盟S14世界赛选手数据可视化 由于本学期有一门数据可视化课程&#xff0c;课程结课作业要求完成一个数据可视化的小Demo&#xff0c;于是便有了这个小项目&#xff0c;课程老师要求比较简单&#xff0c;只要求熟练运用可视化工具展示数据&#xff0c;并不要求数据来源&am…

Linux系统编程——详解页表

目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结&#xff1a; 一、前言 页表是我们之前在讲到程序地址空间的时候说到的&#xff0c;它是物理内存到进程程序地址空间的一个桥梁&#xff0c;通过它物理内存的数据和代码才能映射到进程的程序地址空间中&#xff…

【Java数据结构】LinkedList与链表

认识LinkedList LinkedList就是一个链表&#xff0c;它也是实现List接口的一个类。LinkedList就是通过next引用将所有的结点链接起来&#xff0c;所以不需要数组。LinkedList也是以泛型的方法实现的&#xff0c;所以使用这个类都需要实例化对象。 链表分为很多种&#xff0c;比…

《一文读懂卷积网络CNN:原理、模型与应用全解析》

《一文读懂卷积网络CNN&#xff1a;原理、模型与应用全解析》 一、CNN 基本原理大揭秘&#xff08;一&#xff09;从人类视觉到 CNN 灵感&#xff08;二&#xff09;核心组件详解 二、经典 CNN 模型巡礼&#xff08;一&#xff09;LeNet-5&#xff1a;开山鼻祖&#xff08;二&a…

教育元宇宙的优势与核心功能解析

随着科技的飞速发展&#xff0c;教育领域正迎来一场前所未有的变革。教育元宇宙作为新兴的教育形态&#xff0c;以其独特的优势和丰富的功能&#xff0c;正在逐步改变我们的学习方式。本文将深入探讨教育元宇宙的优势以及其核心功能&#xff0c;为您揭示这一未来教育的新趋势。…

openGauss与GaussDB系统架构对比

openGauss与GaussDB系统架构对比 系统架构对比openGauss架构GaussDB架构 GaussDB集群管理组件 系统架构对比 openGauss架构 openGauss是集中式数据库系统&#xff0c;业务数据存储在单个物理节点上&#xff0c;数据访问任务被推送到服务节点执行&#xff0c;通过服务器的高并…

idea 8年使用整理

文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小&#xff0c;并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…

C++ OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性&#xff0c;用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或者其他复杂的计算&#xff0c;也就是说窗口函数可以跨行计算&#xff0c;可以扫描所有的行&#xff0c;并把结果填到每一行中。这些函数通常与…

SpringBoot(Ⅱ)——@SpringBootApplication注解+自动装配原理+约定大于配置

1. SpringBootApplication注解 SpringBootApplication标注在某个类上说明这个类是SpringBoot的主配置类&#xff0c;SpringBoot就通过运行这个类的main方法来启动SpringBoot应用&#xff1b; 并且Configuration注解中也有Component注解&#xff0c;所以这个主启动类/主配置类…

音视频入门知识(二)、图像篇

⭐二、图像篇 视频基本要素&#xff1a;宽、高、帧率、编码方式、码率、分辨率 ​ 其中码率的计算&#xff1a;码率(kbps)&#xff1d;文件大小(KB)&#xff0a;8&#xff0f;时间(秒)&#xff0c;即码率和视频文件大小成正比 YUV和RGB可相互转换 ★YUV&#xff08;原始数据&am…