首页 > 其他分享 >视频上传及压缩SpringBoot

视频上传及压缩SpringBoot

时间:2023-03-03 10:12:11浏览次数:43  
标签:convertFile 视频 return SpringBoot fileName file 上传 String

  在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

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

标签:convertFile,视频,return,SpringBoot,fileName,file,上传,String
From: https://www.cnblogs.com/izmm/p/17174508.html

相关文章

  • Springboot打包部署的步骤
    1.配置pom.xml引入插件<groupId>com.bostech</groupId><artifactId>dcs</artifactId><version>0.0.1-SNAPSHOT</version><!--注意把packaging标签改为jar......
  • springboot gradle 集成流程引擎activiti
    plugins{id'org.springframework.boot'version'2.1.4.RELEASE'id'io.spring.dependency-management'version'1.0.13.RELEASE'id'java'}group=......
  • 七牛文件上传服务封装
    packagecom.sxsoft.admin.utils;importcn.hutool.http.HttpUtil;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;importcom.baomidou......
  • 【视频】R语言生存分析原理与晚期肺癌患者分析案例|数据分享|附代码数据
    原文链接:http://tecdat.cn/?p=10278最近我们被客户要求撰写关于生存分析的研究报告,包括一些图形和统计输出。生存分析(也称为工程中的可靠性分析)的目标是在协变量和事件时......
  • springboot application.yml 配置说明
    1.springbootapplication.yml配置说明server:port:8080spring:datasource:username:rootpassword:123456driver-class-name:com.mysql.cj.......
  • 解决码云Gitee上传文件大小受限的问题
     {https://blog.csdn.net/qq_20042935/article/details/119762405}第一种是清空仓库,这种操作很危险,直接就会把仓库完全清空了,如果不需要看提交记录这些之类的,可以选......
  • 解读场景化视频制作工具的实现过程
    内容视频化正当其时,企业级智创工具创造新价值。全领域的内容视频化已是显性之势,其不仅覆盖传媒行业,更多泛行业正在以视频化内容的多元姿态创造新的商业价值。于是,不仅新......
  • Python爬虫:原来微博上的视频下载链接在这啊
    最近看了一下网页版的微博,觉得那上面的视频不错,想获取它上面的下载链接,于是就写了这篇博文。1.几个视频播放平台的下载链接的实现1.西瓜视频西瓜视频这个平台上面......
  • JSP上传文件夹的三种解决方案
    ​ 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现。先说下要求:PC端全平台支持,要求支持Windows,Mac,Linux......
  • 如何上传你的组件到npm
    前言以react为例子webpack作为打包工具准备工作安装nodenpm上注册账号https://www.npmjs.com/创建要上传组件新建项目生成package.json文件npminit安装依赖np......