项目以前是用SpringMvc开发的,但最近打算用SpringBoot改造。 上传的内容有文件和表格。 以下是文件上传部分的代码。
@requestmapping(/fileupload ) publicvoidfileupload ) httpservletrequestrequest,HttpServletResponse response, @requestparam(file ) MultipartFile file ) throwsexception ) mapstring,Objectmap=new HashMapString,Object; log.info (开始文件上载); //用于存储文件的路径string save path=request.getsession (.getservletcontext ).get realpath (/uploads ) ); diskfileitemfactoryfactory=newdiskfileitemfactory (; servletfileuploadupload=newservletfileupload (factory; listitems=upload.parse request (request ); Iterator itr=items.iterator (; wile(ITR.Hasnext () )! -省略中间代码--}调试到items时,items为空数组,所以while循环不进入此处,直接跳过。 程序也运行了,文件上传没有成功。
大多数网民提出的解决方案是在application.properties中添加以下代码。
spring.http.multipart.enabled=false
理由也很充分
spring-boot附带的org.spring framework.web.multipart.multipart file
如果与Multipart发生碰撞,并且MultipartResolver和ServletFileUpload一起使用(iter.hasNext ) ),则会返回false .从而导致整个循环弹出。 出现问题的原因是Spring框架首先调用MultipartResolver来处理http multi-part请求。 这里http multipart的请求已经被消耗了。 然后,如果交给ServletFileUpload,ServletFileUpload将无法获得相应的多部件请求。 因此,删除多结果配置。
我试了一下,但是即使用了,也不知道需要在什么地方配置什么。 我偶然看到了后面有一个大神的方法。 他的方法在详细说明中。 大致是这样的。 1、新文件分析器multipartResolver
@ configurationpublicclassbaseconfig { @ bean (name=' multipart resolver ' ) publicmultipartresolver ) )。 resolver.set default encoding (utf-8 ); resolver.setresolvelazily(true; 启用//resolveLazily属性是因为UploadAction将推迟文件分析以捕获文件大小异常。 resolver.setmaxinmemorysize (40960; resolver.setmaxuploadsize (50 * 1024 * 1024 ); //上传文件大小50m 50 * 1024 * 1024返回解决程序; }2.同时在application.properties中输入:
spring.http.multipart.enabled=true,此外作者设为true,我表示怀疑,应该是false才对吧
3 .然后,将部分注释添加到要开始项目的Application.java中,并从WebMvcConfigurationSupport开始。 详情请参照以下内容。
@ springbootapplication (exclude={ datasourceautoconfiguration.class } ) enableautoconfiguration ) exclude={ multi parati @ enable async @ servletcomponentscan @ enableschedulingpublicclassapplicationextendswebmvconfigurationsupport { publicstaticvationticvvcvcvcate @ overridepublicvoidaddinterceptors (interceptorregistryregistry ) authorizationinterceptor=new registry super.addinterceptors(registry ); 然后,在Controller界面中通过@requestparam(「excel”) MultipartFile excel接收文件上载请求就好了
@requestmapping(value=“/import”,method=RequestMethod.POST ) ) )。
公共void upload (@ request param )“excel”)多文件excel
system.out.println(「success”);
}
我试了一下,但不适合我的情况。 最后,参考以前创建的项目,http://www.Sina.com/application.properties修改了删除新添加的代码:
BaseConfig,去掉
spring.http.multipart.enabled=false,然后修改启动类代码,
@ springbootapplication (exclude={ datasourceautoconfiguration.class } ) enableautoconfiguration ) exclude={ multi parati @ enable async @ servletcomponentscan @ enable scheduling @ mappers can (' com.cs.CBC.*.mapper ' ) )。 publicclassspringbootapplication { publicstaticvoidmain (string [ ] args ) spring application.run } springbootapplication } @requestparam('file ) )删除并调试多文件文件文件,文件和表单分析成功! 最终文件也上传成功了。
最后我想说的是,每个人的项目布局和需求都不一样,别人的做法可以适应自己的项目,但你项目很多地方的布局都和别人不一样,你可以找到自己的调整,经过多次尝试,最终解决问题。 感谢您使用此博客方法: https://blog.csdn.net/QQ _ 34244479/article/details/88063390