首页 > 编程知识 正文

ajaxfileupload用法,servlet500错误原因解决方法

时间:2023-05-05 15:30:34 阅读:111307 作者:3928

项目以前是用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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。