如何处理MaxUploadSizeExceededException [英] How to handle MaxUploadSizeExceededException
问题描述
谢谢。
将多重分解器添加到您的Spring配置:
/ p>
< bean id =multipartResolverclass =org.springframework.web.multipart.commons.CommonsMultipartResolver>
<! - 上传文件的最大大小(以字节为单位) - >
<! - < property name =maxUploadSizevalue =10000000/> - >
< property name =maxUploadSizevalue =1000/>
< / bean>
模型 - UploadedFile.java :
package com.mypkg.models;
导入org.springframework.web.multipart.commons.CommonsMultipartFile;
public class UploadedFile
{
private String title;
私有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;
$ b 查看 - /上传.jsp :
<%@ page language =javacontentType =text / html; charset = ISO-8859-1pageEncoding =ISO-8859-1%>
<%@ taglib prefix =springuri =http://www.springframework.org/tags%>
<%@ taglib prefix =formuri =http://www.springframework.org/tags/form%>
<%@ taglib prefix =curi =http://java.sun.com/jsp/jstl/core%>
< html>
< head>
< title>测试档案上传< /标题>
< / head>
< body>
< h1>选择要上传的文件< / h1>
< c:if test =$ {not empty errors}>
< h2 style =color:red;> $ {errors}。< / h2>
< / c:if>
< tr>
< td width =180>< label class =title>标题:< / label>< / td>
< td width =420>< form:input id =titlepath =titlecssClass =areaInputsize =30maxlength =128/>< TD>
< / tr>
< tr>
< td width =180>< label class =title>档案:< / label>< / td>
< td width =420>< form:input id =fileDatapath =fileDatatype =file/>< / td>
< / tr>
< tr>
< td width =180>< / td>
< td width =420>< input type =submitvalue =Upload File/>< / td>
< / tr>
< / table>
< / form:form>
< / body>
< / html>
控制器 - FileUploadController.java :
package 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;
导入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());
返回/ upload;
@RequestMapping(value =/ upload,method = RequestMethod.POST)
public String create(UploadedFile uploadedFile,BindingResult result)
{
//使用文件
做一些事情System.out.println(######### File Uploaded with Title:+ uploadedFile.getTitle());
System.out.println(#########创建本地文件:/ var / test-file-upload /+ uploadedFile.getFileData()。getOriginalFilename());
尝试
{
InputStream in = uploadedFile.getFileData()。getInputStream();
FileOutputStream f = new FileOutputStream(
/ var / test-file-upload /+ uploadedFile.getFileData()。getOriginalFilename());
int ch = 0; ((ch = in.read())!= -1)
{
f.write(ch);
}
f.flush();
f.close();
catch(IOException e)
{
e.printStackTrace();
}
返回redirect:/;
$ b $ ***上传过程中出现异常,并返回查看错误*** /
public ModelAndView resolveException(HttpServletRequest请求,
HttpServletResponse响应,对象处理程序,异常异常)
{
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());
返回新的ModelAndView(/ upload,model);
}
}
============================ ============================================
MaxUploadSizeExceededException
exception appears when I upload a file whose size exceeds the maximum allowed. I want to show an error message when this exception appears (like a validation error message). How can I handle this exception to do something like this in Spring 3?
Thanks.
解决方案 I finally figured out a solution that works using a HandlerExceptionResolver.
Add multipart resolver to your Spring config:
<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>
Model - 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;
}
}
View - /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>
Controller - FileUploadController.java:
package 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);
}
}
========================================================================
这篇关于如何处理MaxUploadSizeExceededException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!