MultipartFile强转CommonsMultipartFile失败问题

最近使用spring开发的时候,进行统计上传视频的时长,有这么一段代码
MultipartFile强转CommonsMultipartFile失败问题_第1张图片但运行的时候吧,发现报错了,

java.lang.ClassCastException: org.springframework.web.multipart.support.StandardMultipartHttpServletRequest$StandardMultipartFile cannot be cast to org.springframework.web.multipart.commons.CommonsMultipartFile

并指向这个图中标记的地方,一翻译原来是类型强制转换错误。

其实项目用了很长时间,但不知为何突然不好使了,估计是最近项目重构,忽略了啥,毕竟这代码一开始也不是我写的。
解决方法:
上面的Encoder是引用了第三方jar包,叫 jave.已上传百度网盘,可以用微信扫一扫
MultipartFile强转CommonsMultipartFile失败问题_第2张图片
我的项目是springboot项目,直接整jar包路径,然后配置,感觉很不友好,我就将其放在了maven本地仓库。
首先配置maven环境变量,win+R 输入cmd
输入指令 mvn -v,查看maven信息
MultipartFile强转CommonsMultipartFile失败问题_第3张图片找到jar包的下载路径

MultipartFile强转CommonsMultipartFile失败问题_第4张图片MultipartFile强转CommonsMultipartFile失败问题_第5张图片

可以看到直接指向这个目录了,然后开始输入指令

mvn install:install-file -DgroupId=it.sauronsoftware -DartifactId=jave -Dversion=1.0.2 -Dpackaging=jar -Dfile=jave-1.0.2.jar

解释一下:
– DgroupId和DartifactId构成了该jar包在pom.xml的坐标, 对应依赖的DgroupId和DartifactId
– Dfile表示需要上传的jar包的绝对路径

<dependency>
  <groupId>it.sauronsoftware</groupId>
  <artifactId>jave</artifactId>
  <version>1.0.2</version>
</dependency>

然后回车即可
MultipartFile强转CommonsMultipartFile失败问题_第6张图片我们去看一下

MultipartFile强转CommonsMultipartFile失败问题_第7张图片

若是团队开发的话,建议搭建一个私服,可自行查阅资料进行搭建,我后期也会加上此教程。
我公司团队使用的是Sonatype Nexus Repository Manager,界面大概样子
MultipartFile强转CommonsMultipartFile失败问题_第8张图片
朋友们可自行查阅相关资料。

我们引入包后,还需要在启动类做相关配置
在启动类加一个注解

@SpringBootApplication( exclude = {MultipartAutoConfiguration.class})

并编写一下代码:使其支持强转。

  @Bean("multipartResolver")
    public CommonsMultipartResolver multipartResolver(){
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        resolver.setMaxInMemorySize(10000);
        return resolver;
    }

MultipartFile强转CommonsMultipartFile失败问题_第9张图片
重启项目即可。

补充一下
看下方代码,这是我所使用的的方法,代码只是参考,因需求而异,可进行改动,但核心内容是一样的

 public String getVideoTime(HttpServletRequest request, String attributeName) throws Exception {
        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartRequest.getFile(attributeName);
        if (multipartFile == null || multipartFile.getSize() <1) {
            return null;
        }
        // 将MultipartFile转换为Encoder所需的File
        CommonsMultipartFile cf = (CommonsMultipartFile)multipartFile;
        DiskFileItem fi = (DiskFileItem) cf.getFileItem();
        File source = fi.getStoreLocation();
        // 获取视频时长
        Encoder encoder = new Encoder();
        MultimediaInfo m = encoder.getInfo(source);
        long ls = m.getDuration()/1000;
        int hour = (int) (ls/3600);
        int minute = (int) (ls%3600)/60;
        int second = (int) (ls-hour*3600-minute*60);
        //logger.info("视频时长为:{}时{}分{}秒", hour, minute, second);
        String time = hour+":"+minute+":"+second;
        return time;
    }

后期会加上maven私服搭建教程,敬请期待

你可能感兴趣的:(MultipartFile强转CommonsMultipartFile失败问题)