MultipartFile强转CommonsMultipartFile失败问题

最近使用spring开发的时候,进行统计上传视频的时长,有这么一段代码
在这里插入图片描述但运行的时候吧,发现报错了,

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

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

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

在这里插入图片描述在这里插入图片描述

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

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>

然后回车即可
在这里插入图片描述我们去看一下

在这里插入图片描述

若是团队开发的话,建议搭建一个私服,可自行查阅资料进行搭建,我后期也会加上此教程。
我公司团队使用的是Sonatype Nexus Repository Manager,界面大概样子
在这里插入图片描述
朋友们可自行查阅相关资料。

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

@SpringBootApplication( exclude = {MultipartAutoConfiguration.class})

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

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

在这里插入图片描述
重启项目即可。

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

 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私服搭建教程,敬请期待

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值