MaxUploadSizeExceededException当我上传的文件大小超过允许的最大值时,会出现异常。我想在出现此异常时显示一条错误消息(如验证错误消息)。如何在Spring 3中处理此异常以执行类似的操作?
MaxUploadSizeExceededException
谢谢。
我终于找到了一个使用HandlerExceptionResolver的解决方案。
将多部分解析器添加到您的Spring配置中 :
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- the maximum size of an uploaded file in bytes --> <!-- <property name="maxUploadSize" value="10000000"/> --> <property name="maxUploadSize" value="1000"/> </bean>
模型-UploadedFile.java :
package com.mypkg.models; import org.springframework.web.multipart.commons.CommonsMultipartFile; public class UploadedFile { private String title; private CommonsMultipartFile fileData; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public CommonsMultipartFile getFileData() { return fileData; } public void setFileData(CommonsMultipartFile fileData) { this.fileData = fileData; } }
查看-/upload.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Test File Upload</title> </head> <body> <h1>Select a file to upload</h1> <c:if test="${not empty errors}"> <h2 style="color:red;">${errors}.</h2> </c:if> <form:form modelAttribute="uploadedFile" method="post" enctype="multipart/form-data" name="uploadedFileform" id="uploadedFileform"> <table width="600" border="0" align="left" cellpadding="0" cellspacing="0" id="pdf_upload_form"> <tr> <td width="180"><label class="title">Title:</label></td> <td width="420"><form:input id="title" path="title" cssClass="areaInput" size="30" maxlength="128"/></td> </tr> <tr> <td width="180"><label class="title">File:</label></td> <td width="420"><form:input id="fileData" path="fileData" type="file" /></td> </tr> <tr> <td width="180"></td> <td width="420"><input type="submit" value="Upload File" /></td> </tr> </table> </form:form> </body> </html>
控制器 -FileUploadController.java:包com.mypkg.controllers;
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MaxUploadSizeExceededException; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import com.mypkg.models.UploadedFile; @Controller public class FileUploadController implements HandlerExceptionResolver { @RequestMapping(value = "/upload", method = RequestMethod.GET) public String getUploadForm(Model model) { model.addAttribute("uploadedFile", new UploadedFile()); return "/upload"; } @RequestMapping(value = "/upload", method = RequestMethod.POST) public String create(UploadedFile uploadedFile, BindingResult result) { // Do something with the file System.out.println("######### File Uploaded with Title: " + uploadedFile.getTitle()); System.out.println("######### Creating local file: /var/test-file-upload/" + uploadedFile.getFileData().getOriginalFilename()); try { InputStream in = uploadedFile.getFileData().getInputStream(); FileOutputStream f = new FileOutputStream( "/var/test-file-upload/" + uploadedFile.getFileData().getOriginalFilename()); int ch = 0; while ((ch = in.read()) != -1) { f.write(ch); } f.flush(); f.close(); } catch (IOException e) { e.printStackTrace(); } return "redirect:/"; } /*** Trap Exceptions during the upload and show errors back in view form ***/ public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) { Map<String, Object> model = new HashMap<String, Object>(); if (exception instanceof MaxUploadSizeExceededException) { model.put("errors", exception.getMessage()); } else { model.put("errors", "Unexpected error: " + exception.getMessage()); } model.put("uploadedFile", new UploadedFile()); return new ModelAndView("/upload", model); } } ========================================================================