页面上传bmp格式图片报错:net.sf.jmimemagic.MagicMatchNotFoundException

在处理图片上传时遇到BMP格式导致的net.sf.jmimemagic.MagicMatchNotFoundException异常。由于jmimemagic包不支持BMP类型,解决方案是通过后台判断图片格式,如果是BMP则提示不支持。在Dubbo消费端和提供方都出现异常。通过获取图片的真实格式和从MultipartFile中获取文件流,实现了对BMP格式图片的前端规避。
摘要由CSDN通过智能技术生成

最近碰到这个问题,页面上传图片,gif,png,jpg,jpeg都能正常上传,但是bmp格式的就报错,查看后台日志确实是报错了,原因就是jmimemagic包找不到对应的类型。报了个类型不匹配的错误。我的解决办法总体来讲并没有正面解决这个问题。而是后台判断图片的格式,如果是bmp格式,就直接返回页面提示信息:不支持的图片格式类型

后台是dubbo服务,在消费端先是报错:java.io.IOException: Response data error, expect Throwable, but get {suppressedExceptions=[], cause=(this Map), stackTrace=[Ljava.lang.StackTraceElement;@22282b30, detailMessage=null},然后去提供方看代码日志,就报错如题目中所说:net.sf.jmimemagic.MagicMatchNotFoundException。具体异常如下:

1.dubbo消费方

上传图片出错
com.jd.service.rpc.RpcException: Failed to invoke the method uploadImg in the service com.jd.ecc.b2b.base.center.service.client.ImgService. Tried 3 times of the providers [10.112.12.100:20881] (1/1) from the registry 10.112.12.10:2181 on the consumer 10.112.12.119 using the dubbo version 2.4.10. Last error is: Failed to invoke remote method: uploadImg, provider: dubbo://10.112.12.100:20881/com.jd.ecc.b2b.base.center.service.client.ImgService?anyhost=true&application=mall&check=false&default.timeout=30000&dubbo=2.0.1***************省略dubbo的信息******************,
cause: java.io.IOException: Response data error, expect Throwable, but get {suppressedExceptions=[], cause=(this Map), stackTrace=[Ljava.lang.StackTraceElement;@22282b30, detailMessage=null}
java.io.IOException: Response data error, expect Throwable, but get {suppressedExceptions=[], cause=(this Map), stackTrace=[Ljava.lang.StackTraceElement;@22282b30, detailMessage=null}
        at com.jd.service.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:94)
        at com.jd.service.rpc.protocol.dubbo.DecodeableRpcResult.decode(DecodeableRpcResult.java:109)
        at com.jd.service.rpc.protocol.dubbo.DubboCodec.decodeBody(DubboCodec.java:97)
        at com.jd.service.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:128)
        at com.jd.service.remoting.exchange.codec.ExchangeCodec.decode(ExchangeCodec.java:87)
        at com.jd.service.rpc.protocol.dubbo.DubboCountCodec.decode(DubboCountCodec.java:49)
        at com.jd.service.remoting.transport.netty.NettyCodecAdapter$InternalDecoder.messageReceived(NettyCodecAdapter.java:135)
        at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
        at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:559)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268)
        at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255)
        at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109)
        at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312)
        at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90)
        at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178)
        at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
        at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

        at com.jd.service.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:101)
        at com.jd.service.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:226)
        at com.jd.service.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:72)
        at com.jd.service.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)
        at com.jd.service.common.bytecode.proxy75.uploadImg(proxy75.java)
        at com.jd.ecc.b2b.mall.web.register.AuthenticationController.uploadImage(AuthenticationController.java:550)
        at com.jd.ecc.b2b.mall.web.register.AuthenticationController.ajaxFileUpload(AuthenticationController.java:1388)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万米高空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值