开发者社区> 问答> 正文

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

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开发者工具的请求截图如下:

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

展开
收起
爱吃鱼的程序员 2020-05-30 20:54:28 832 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    是不是你在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)
        @ResponseBody
        public String uploadBackupFile(@RequestParam MultipartFile file) {
            //下面只是举例
            String fileName = srcFile.getOriginalFilename();
            File destFile = new File(parent, fileName);
            try {
                FileUtils.copyInputStreamToFile(srcFile.getInputStream(), destFile);
            } catch (IOException e) {}
            return RETURN_STR;
        }



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

相关电子书

更多
Spring Boot2.0实战Redis分布式缓存 立即下载
CUDA MATH API 立即下载
API PLAYBOOK 立即下载