目录
项目名称:multimedia-utils
配置
yml 配置上传文件的临时路径
注入 视频处理类FFmpegUtils 以及 图片处理类 ImageMagickUtils
使用(部分)
获取视频信息
生成视频封面图
2021SC@SDUSC
博客二
在上篇博客的最后,我们给出了配置时的具体操作,下面我们具体看一下。
spring: servlet: multipart: # 是否支持 multipart 上传文件 enabled: true # 最大支持文件大小 max-file-size: 10MB # 最大支持请求大小 max-request-size: 10MB # 上传文件的临时目录 location: E:/tomcat-temp
在代码中我们对具体操作进行了注释,即支持multipart上传文件操作。同时设定了最大支持文件大小和支持请求大小,同时设定了上传文件的临时目录。当然这些我们可以在后期进行修改操作。
import com.whty.zdxt.multimedia.util.FFmpegUtils; import com.whty.zdxt.multimedia.util.ImageMagickUtils; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class MultimediaUtilsConfig { /** * 视频处理工具,因为所有压缩任务需要排队进行,所以FFmpegUtils需要是单例的,FFmpegUtils实例交由spring管理就为单例的 */ @Bean public FFmpegUtils fFmpegUtilsImpl() { return new FFmpegUtils(); } /** * 图片处理工具 */ @Bean public ImageMagickUtils imageMagickUtils() { return new ImageMagickUtils(); } }
视频处理类FFmpegUtils 以及图片处理类 ImageMagickUtils我们已经放在整个代码文件中,在后期我们给出整个代码文件时会给出详细解释。下面我们来看一下导入Java包的操作。在我们给出代码的具体注释后,更加容易看懂一些。由于视频处理有很多的压缩任务,因此需要排队进行,所以FFmpegUtils需要是单例的,FFmpegUtils实例交由spring管理就为单例的。
@Bean public ImageMagickUtils imageMagickUtils() { return new ImageMagickUtils(); }是我们给出的具体的图片处理工具。
FileController
import com.example.demo.util.FileUtil; import com.whty.zdxt.multimedia.attribute.CompressionAttributes; import com.whty.zdxt.multimedia.attribute.CropAttributes; import com.whty.zdxt.multimedia.attribute.ResizeAttributes; import com.whty.zdxt.multimedia.attribute.VideoAttributes;S import com.whty.zdxt.multimedia.enumeration.Suffix; import com.whty.zdxt.multimedia.enumeration.VideoSize; import com.whty.zdxt.multimedia.pojo.FFmpegInfo; import com.whty.zdxt.multimedia.util.FFmpegUtils; import com.whty.zdxt.multimedia.util.ImageMagickUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.servlet.MultipartProperties; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; @RestController @RequestMapping("/file") public class FileController { @Autowired private FFmpegUtils fFmpegUtils; @Autowired private MultipartProperties multipartProperties; @Autowired private ImageMagickUtils imageMagickUtils;
在FileController文件中,我们引用了多个类。在我们给出具体的符合要求视频文件后,我们首先对视频进行分析,分析视频信息。即生成上传视频的临时文件,然后调用视处理工具类,最后删除上传视频的临时文件。
/** * 获取视频信息 */ @PostMapping("/getVideoInfo") public Object getFileInfo(@RequestParam MultipartFile file) { String location = multipartProperties.getLocation(); // 生成上传视频的临时文件 File inputFile = FileUtil.multipartFile2File(file, location); // 调用视频处理工具类 String inputFileName = inputFile.getName(); FFmpegInfo info = fFmpegUtils.getInfo(location, inputFileName); // 删除上传视频的临时文件 inputFile.delete(); return info; }
下一步我们实现生成视频封面图功能。具体内容类似即生成上传视频的临时文件,然后调用视处理工具类(获得视频封面图),最后删除上传视频的临时文件。
/** * 生成视频封面图 */ @PostMapping("/createVideoCover") public Object createVideoCover(@RequestParam MultipartFile file) { String location = multipartProperties.getLocation(); // 生成上传视频的临时文件 File inputFile = FileUtil.multipartFile2File(file, location); // 调用视频处理工具类 String outputFileName = fFmpegUtils.createCover(location, inputFile.getName()); // 删除上传视频的临时文件 inputFile.delete(); return outputFileName; }