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

其他教程   发布日期:2023年08月02日   浏览次数:467

这篇“Springboot如何实现视频上传及压缩功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Springboot如何实现视频上传及压缩功能”文章吧。

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

  1. public AjaxResult videoUploadFile(MultipartFile file){
  2. try {
  3. if(null == file || file.isEmpty()){
  4. return AjaxResult.error("文件为空");
  5. }
  6. String ossFilePrefix = StringUtils.genUUID();
  7. String fileName = ossFilePrefix +"-"+ file.getOriginalFilename();
  8. String fileurl = AliOssUtils.videoUploadFile(file,fileName);
  9. AjaxResult ajax = AjaxResult.success();
  10. ajax.put("fileName", "after_"+fileName);
  11. ajax.put("url", fileurl);
  12. return ajax;
  13. } catch (Exception e) {
  14. return AjaxResult.error(e.getMessage());
  15. }
  16. }

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

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

三、开始压缩视频

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

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

  1. private static String getFileUrl(String path) throws IOException {
  2. File file = new File(path);
  3. FileInputStream fileInputStream = new FileInputStream(file);
  4. MultipartFile multipartFile1 = new MockMultipartFile(file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
  5. uploadFile(multipartFile1, file.getName());
  6. String url = getUrl(file.getName());
  7. return url;
  8. }

五、核心调用

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

六、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如何实现视频上传及压缩功能的资料请关注九品源码其它相关文章!