使用Tomcat在Spring中上载与允许的最大大小相关的文件

我是Spring的新手,我希望有一个multipart表单并处理MaxUploadSizeExceededExceptionexception,以便在jsp中显示错误消息。 我遇到的主要问题是MaxUploadSizeLimitExceededExceptionResolver类中的ModelAndView对象,我不知道如何将它用于此前解释过的目标。

我拥有的文件:1)模型类UploadItem.java。 2)查看表单UploadForm.jsp。 3)Controller Uploadcontroller.java。 4)类MaxUploadSizeLimitExceededExceptionResolver.java来处理exceptionUploadcontroller

1)模型UploadItem

public class UploadItem { private String name; private CommonsMultipartFile fileData; public String getName() { return name; } public void setName(String name) { this.name = name; } public CommonsMultipartFile getFileData() { return fileData; } public void setFileData(CommonsMultipartFile fileData) { this.fileData = fileData; } } 

2)查看表单UploadForm.jsp

    Upload form   
Upload Fields

Name


File


3)Controller Uploadcontroller

 public class Uploadcontroller { @RequestMapping(method = RequestMethod.GET) public String getUploadForm(Model model) { model.addAttribute(new UploadItem()); return "upload/uploadForm"; } @RequestMapping(method = RequestMethod.POST) public String create(HttpServletRequest request, UploadItem uploadItem, BindingResult result, Exception exception) { if (result.hasErrors()) { // logger.info("create upload"); for (ObjectError error : result.getAllErrors()) { System.err.println("Error: " + error.getCode() + " - " + error.getDefaultMessage()); } return "upload/uploadForm"; } System.err.println("Test upload: " + uploadItem.getName()); System.err.println("Test upload: " + uploadItem.getFileData().getOriginalFilename()); // TODO redirect this return "/home"; } } 

4)处理exceptionUploadController的组件

 @Component public class MaxUploadSizeLimitExceededExceptionResolver extends SimpleMappingExceptionResolver { private static final Logger logger = LoggerFactory .getLogger(HomeController.class); @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { Map model = new HashMap(); logger.info("getUploadForm at the beggining"); ModelAndView modelView = new ModelAndView(); if (exception instanceof MaxUploadSizeExceededException) { model.put("errors", exception.getMessage()); modelView.addObject("errors", exception.getMessage()); logger.info("getUploadForm: MaxUploadSizeExceededException" ); } else { model.put("errors", "Unexpected error: " + exception.getMessage()); modelView.addObject("errors", "Unexpected error: " +exception.getMessage()); } logger.info("getUploadForm at the end" ); model.put("uploadedFile", new UploadItem()); modelView.addObject(new UploadItem());//("uploadedFile", new UploadItem()); modelView.setViewName("/upload/uploadForm"); return modelView; } } 

编辑以添加更多详细信息:实际上,问题出在另一个方向。 我的maxUploadSize文件的大小设置为1MB,但我试图用大于3 MB的文件进行测试。 当我尝试使用文件,直到最大2 MB工作正常。 问题是我得到一个ERR_CONNECTION_RESET,它似乎与Tomcat有关,一个maxSwallowSize的配置 – > stackoverflow.com/questions/29113262 / …我会继续研究并保持这个线程的更新。


新的消息。 我尝试过Tomcat 7.0.61,错误是ERR_CONNECTION_ABORTED我尝试过Tomcat 6.0.43,没有错误!

调查后,问题是由于Tomcat造成的。
在版本7.0.55中引入了默认设置为maxSwallowSize的属性为2MB。 这使Tomcat中止了上传请求。 通过将此属性设置为另一个值 ,问题得以解决(我将其更改为-1,请不要在您的PRD环境中执行此操作,因为Tomcat将尝试获取要上载的X MB文件)。 我通过在我的连接器属性中添加我的Tomcat服务器文件$ {tomcat_dir} /conf/server.xml中的属性maxSwallowSize来做到这一点

  

您需要重新启动Tomcat才能使用此配置,如果不起作用,请删除服务器并重新添加。