Springboot实现视频上传及压缩功能

 更新时间:2023年03月03日 10:20:06   作者:小盟主  
这篇文章主要介绍了Springboot实现视频上传及压缩功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  在SpringBoot项目中实现视频的上传和下载,地址都是存放至阿里云的,但是由于视频数量越来越多占用的内存也越来越大,导致服务器内存不足,公司为了减少服务器开支,要求我们研发人员把最好把内存利用到极致,尽量减少不必要的浪费,所以就需要把视频进行压缩。

一、定义视频上传请求接口

public AjaxResult videoUploadFile(MultipartFile file){
  try {
    if(null == file || file.isEmpty()){
      return AjaxResult.error("文件为空");
    }
    String ossFilePrefix = StringUtils.genUUID();
    String fileName = ossFilePrefix +"-"+ file.getOriginalFilename();
    String fileurl = AliOssUtils.videoUploadFile(file,fileName);
    AjaxResult ajax = AjaxResult.success();
    ajax.put("fileName", "after_"+fileName);
    ajax.put("url", fileurl);
    return ajax;
  } catch (Exception e) {
    return AjaxResult.error(e.getMessage());
  }
}

二、视频暂存至本地文件夹

public static final String uploadVideo(String baseDir, MultipartFile file, String fileName) throws FileSizeLimitExceededException, IOException {
    File desc = getAbsoluteFile(baseDir, fileName);
    file.transferTo(desc);
    String pathFileName = getPathFileName(baseDir, fileName);
    return pathFileName;
}

三、开始压缩视频

public static  boolean toCompressFile(String convertFile,String targetFile){
    try{
        /**将视频压缩为 每秒15帧 平均码率600k 画面的宽与高 为1280*720*/
        String cutCmd="ffmpeg -i " + convertFile + " -r 15 -b:v 600k  -s 1280x720 "+ targetFile;
        log.info("cutCmd: " + cutCmd);
        runCmd(cutCmd);
        log.info("文件:"+convertFile+" 视屏压缩完成");
    }catch(Exception e){
        e.printStackTrace();
        log.info("压缩文件出现异常:"+e.getMessage());
        return false;
    }
    return true;
}

四、上传至阿里云并获取压缩后的视频路径

private static String getFileUrl(String path) throws IOException {
    File file = new File(path);
    FileInputStream fileInputStream = new FileInputStream(file);
    MultipartFile multipartFile1 = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
    uploadFile(multipartFile1, file.getName());
    String url = getUrl(file.getName());
    return url;
}

五、核心调用

public static String videoUploadFile(MultipartFile multipartFile, String fileName) throws IOException {
    //存放路径
    String filePath = FileUploadUtils.uploadVideo(getDefaultBaseDir(), multipartFile, fileName);
    String convertFile = filePath.replace("/profile", getDefaultBaseDir()).replaceAll("//", "/");
    //字符串第一个字符最后出现的下标
    int lastIndex = convertFile.lastIndexOf("/");
    StringBuilder sb = new StringBuilder(convertFile);
    String convertFile1 = sb.insert(lastIndex + 1, "after_").toString();
    boolean flag = toCompressFile(convertFile, convertFile1);
    if (!flag) {
        throw new CustomException("文件压缩出现异常");
    }
    //读取压缩后的文件并上传至阿里云
    String url = getFileUrl(convertFile1);
    //删除本地暂存文件
    FileUtils.deleteFile(convertFile);
    log.info("文件:" + convertFile + " 删除成功");
    FileUtils.deleteFile(convertFile1);
    log.info("文件:" + convertFile1 + " 删除成功");
    return url;
}

六、spring boot的yml配置文件

修改application.yml文件:
spring:
  servlet:
    mvc:
      async:
        request-timeout: 2000000

修改application-prd.yml文件:
spring:
  servlet:
    multipart:
      max-file-size: 1024MB
       max-request-size: 1024MB

视频上传至阿里云这一块代码没有贴出来,每个项目都大同小异,可根据自己项目实际情况做调整,这篇最核心的是视频压缩的方法及思路。

到此这篇关于Springboot实现视频上传及压缩功能的文章就介绍到这了,更多相关Springboot视频上传压缩内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mybatis枚举类型转换源码分析

    Mybatis枚举类型转换源码分析

    在Mybatis的TypeHandlerRegistry中,添加了常用的类转换器,其中默认的枚举类型转换器是EnumTypeHandler,这篇文章主要介绍了Mybatis枚举类型转换源码分析,需要的朋友可以参考下
    2024-05-05
  • SpringMVC中的DispatcherServlet详细解析

    SpringMVC中的DispatcherServlet详细解析

    这篇文章主要介绍了SpringMVC中的DispatcherServlet详细解析,DispatcherServlet也是一个Servlet,它也能通过Servlet的API来响应请求,从而成为一个前端控制器,Web容器会调用Servlet的doGet()以及doPost()等方法,需要的朋友可以参考下
    2023-12-12
  • SpringBoot如何使用validator框架优雅地校验参数

    SpringBoot如何使用validator框架优雅地校验参数

    文章介绍了如何使用SpringValidation进行参数校验,包括引入依赖、@requestBody和@requestParam参数校验、统一异常处理、分组校验、嵌套校验、自定义校验、业务规则校验以及@Valid和@Validated的区别,同时,列举了常用的BeanValidation和HibernateValidator注解
    2025-02-02
  • 关于maven依赖 ${xxx.version}报错问题

    关于maven依赖 ${xxx.version}报错问题

    这篇文章主要介绍了关于maven依赖 ${xxx.version}报错问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Spring Cloud Zuul重试机制探秘

    详解Spring Cloud Zuul重试机制探秘

    本篇文章主要介绍了详解Spring Cloud Zuul重试机制探秘,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Java实现部门员工管理

    Java实现部门员工管理

    这篇文章主要为大家详细介绍了Java实现部门员工管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • JAVAlogback日志管理详解

    JAVAlogback日志管理详解

    本篇文章主要介绍了在SpringBoot中使用Logback管理记录日志,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-09-09
  • Springboot 如何指定获取出 yml文件里面的配置值

    Springboot 如何指定获取出 yml文件里面的配置值

    这篇文章主要介绍了Springboot 如何指定获取出 yml文件里面的配置值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java创建随机数的四种方式总结

    Java创建随机数的四种方式总结

    这篇文章主要介绍了java的四种随机数生成方式的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2022-07-07
  • springboot 设置局域网访问的实现步骤

    springboot 设置局域网访问的实现步骤

    Spring Boot是一个开源Java-based框架,用于创建独立的、生产级别的Spring应用,它旨在简化Spring应用的初始搭建及开发过程,通过提供各种自动配置的starter包,Spring Boot使得项目配置变得简单快速,感兴趣的朋友一起看看吧
    2024-02-02

最新评论