金蝶中间件上的springboot传文件问题

问题描述:后端接口参数为@RequestParam("pic") MultipartFile files1
请求为formdata格式key为“pic”,value为文件体。环境为中标麒麟+金蝶天燕中间件。
测试在此写法在windows+tomcat、windows+金蝶、麒麟+tomcat上均能顺利接收到上传的文件;
但是在麒麟+金蝶环境下,就是拿不到文件。打印
((MultipartHttpServletRequest) request).getFiles("pic").size();

输出为0。没有参数?
过滤器截取request.getInpitSteram()
Content-Disposition: form-data; name="pic"; filename="u=1340423812,3904815246&fm=27&gp=0 - 副本.jpg"
Content-Type: image/jpeg
 
����JFIF��C		



 $.' ",#(7),01444'9=82<.342��C			
 
2!!22222222222222222222222222222222222222222222222222����"��	
���}!1AQa"q2���#B��R��$3br�	
%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������	
���w!1AQaq"2�B����	#3R�br�
$4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������?�L��Q��IEkd���Q��EQ`��b�5.M%�?�Q�IEɥɤ����4��X�hi)(���2i)iY�4d��EYd�sJi(�.h�(�&��(�&�M%d挜�⒍\�j2h��&�&������Rd�QFh�riCIN�.M?�RQN�;vhɦ�ҰM����\�\�QHB�ѓI@�b�ѓ�ERn�8�'��J)��4��Xɤɢ�Z\�2z�Q@M4QLq�&��Rn?�QE�J(��Š);��EQE�R�@.)(�������P)�SE:�qHx���RR�@���
)-%-PE�b�QE��������
(�.((��\���RR�L�-%.h��)��Q@��(��J(��%-(��(��R⒐Š(�RPi)�ZJZ(���
(��%-'z`����
 
-�J)h��&)h��KIE 
(��Q@	KE�
)(���(h��xӖpg�:����;��p�����JJ���:=��$��'�)/������]܈$y"���Qq=���e�YjP�m.b�ulռsLQE�
(�����JJZ()E��0
)qF)�)��S@���
ET�QE�(�����JZJ(�ES���i)���SE(4�(����(��iM%1��Q@���p4�h��(�������
QIK@-%-چ������T�5�
��k�Z;�o���n�JWW={�mP�<���q\Υ�E��Ԕ�މҼKY�U�����������
�������<òG���Z,����9�>����	4h����:'q ��S;�u\������x���r��0+����&�۹��M�p>���J�"?^��vK��R>����fV�Cg=�J
�0bz�t�����N?�♉�`APphi��ٱ�P�a5��m�z#��K���m{L�>�ui�Y�7��	�׍�Ą園(YI~J���+��Yh�7е�e��О��ڊ��s��bs�3_)�~$}u!b�F+�t��Z>�����
�~=h��I3�M%y��浃�F�$�9�BYO�ڴ4_�Zuܟf�1mp3�O�MI���/zdr$щ#`�� ��i�D�E����f������%R�qE:�J1KE!	E-�%-��IERR�P�E��)�R�)�QE�-%RZ(@2�v)1L����4RR���i“���P@���}n�C�{����5	��(@�$������P���kM-���������Z�{==���8$3�������l��)�OA^�߈|a�k����#�)��gŧ���n�*�݇CO7:^��#���Y�q�f�M�����)�<��>ơ��V+��	f^:�
�$�4Ŧ�­O���yQF�G����F$I��r[/X�wW�*�n�z��[��i13Klf�װ�t��F6�4C��E�jv�a�k��	��w��KvQ�դ��[��9g��yn�caG���6��.��U1�y9��ygܩ��T��XY	Y�
MQ�s&8�*H�n\�ӽXm.tPeM�ո�,U�8��@����6�f`���Ni����͞qQ�;I/��SG+	��b8Ҟ���}ޘ��M�N.�8�&���<'��r:i���H��MĘ
[s�Z���u;%�����:~b��n$��#�}�sM�P��1��Z)Hu�;�m6�\e��/x�[h�3��2���

明明有文件传进来!
为什么没有被转到MultipartHttpServletRequest上去?

解决方法:
相应的@Configuration下新增一个@Bean配置
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver(){
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
resolver.setResolveLazily(true);
resolver.setMaxInMemorySize(40960);
//上传文件大小 50M 50*1024*1024
resolver.setMaxUploadSize(50*1024*1024);
return resolver;
}
自定义一个MultipartResolver传给框架(属性设不设与本问题无关,这里我设置了),好使了!666
只是windows+tomcat、windows+金蝶、麒麟+tomcat上均不能用了,使用环境互斥?!!!

第二天研究下原因
MultipartResolver 是一个接口,它的实现类如下图所示,分为 CommonsMultipartResolver 类和 StandardServletMultipartResolver 类。

金蝶中间件上的springboot传文件问题

 

经过测试@Bean中给出StandardServletMultipartResolver不好使,只有给出CommonsMultipartResolver才好使,

先记下来。



上一篇:Winform----自定义控件之半透明遮罩(蒙版遮盖指定控件)


下一篇:UVA 572 Oil Deposits