开发者社区> 问答> 正文

Spring MVC 中调用 Servlet API getPart() 获取上?报错

Spring MVC 中调用 Servlet API getPart() 获取上传的文件(Part对象)失败? 400 报错

    先上代码:

        @ModelAttribute
	public void getBatchFile(HttpServletRequest request, ModelMap map) throws Exception {
		if (request.getRequestURI().contains("confirm_import_batch")) {
			Part part = request.getPart("batch");
			map.put("batch", new MockMultipartFile("batch", part.getInputStream()));

		}
	}

  

     web.xml 中已经往 DispatcherServlet 对应的的 <Servlet> 标签中添加了 <MultipartConfig/> 标签,问题是 getPart() 返回的是null;


    Chrome开发者工具的请求截图如下:

    希望了解的站友能说说,先谢了。

展开
收起
优选2 2020-06-09 11:16:41 1411 0
1 条回答
写回答
取消 提交回答
  • 是不是你在spring配置文件配置的multipartResolver的Bean是用的

    org.springframework.web.multipart.commons.CommonsMultipartResolver

    这个类是用的commons-fileupload进行文件上传,不走Servlet的api。


    如果想用Servlet的api进行上传,这个Bean要用

    org.springframework.web.multipart.support.StandardServletMultipartResolver

    这样MultipartConfig才会起效果。


    ######您的答案解决了我的问题,非常感谢您!######

    对于springmvc的文件上传,控制器应该这样写

    @RequestMapping(value="/backup",method=RequestMethod.POST)@ResponseBodypublicStringuploadBackupFile(@RequestParamMultipartFilefile){//下面只是举例StringfileName=srcFile.getOriginalFilename();FiledestFile=newFile(parent,fileName);try{FileUtils.copyInputStreamToFile(srcFile.getInputStream(),destFile);}catch(IOExceptione){}returnRETURN_STR;}



    ######谢谢您,现在是想用@SessionAttribute实现长事务,所以用@ModelAttribute方法,目的是要在session暂时存一个文件,主要是不清楚为什么这样调用ServletAPI不成功,结合那张截图,您有想法吗?
    2020-06-09 11:16:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载