MaxUploadSizeExceededException exception appears when I upload a file whose size exceeds the maximum allowed. I want to show an error message when this exceptio
I finally figured out a solution that works using a HandlerExceptionResolver.
Add multipart resolver to your Spring config:
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" %>
Test File Upload
Select a file to upload
${errors}.
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 model = new HashMap();
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);
}
}
========================================================================