NIHVIVO-160 Pass the FileUploadException through to the caller. The user particularly needs to see it if it is FileSizeExceeded or RequestSizeExceeded.

This commit is contained in:
jeb228 2010-05-27 20:03:39 +00:00
parent 772de8c449
commit 0df8cdac42
3 changed files with 36 additions and 26 deletions

View file

@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
@ -114,8 +115,19 @@ public class N3MultiPartUpload extends VitroHttpServlet {
throws ServletException, IOException { throws ServletException, IOException {
log.debug("N3MultiPartProcess 0.01"); log.debug("N3MultiPartProcess 0.01");
FileUploadServletRequest request = FileUploadServletRequest FileUploadServletRequest request = null;
.parseRequest(rawRequest, maxFileSize); try {
request = FileUploadServletRequest
.parseRequest(rawRequest, maxFileSize);
} catch (FileUploadException e) {
// TODO: forward to error message
throw new ServletException("Size limit exceeded: " + e.getLocalizedMessage());
}
if (!request.isMultipart()) {
// TODO: forward to error message
throw new ServletException("Must POST a multipart encoded request");
}
log.debug("multipart content detected: " + request.isMultipart()); log.debug("multipart content detected: " + request.isMultipart());
ServletContext application = getServletContext(); ServletContext application = getServletContext();

View file

@ -18,6 +18,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletFileUpload;
/** /**
@ -41,7 +43,8 @@ public abstract class FileUploadServletRequest implements HttpServletRequest {
* Wrap this {@link HttpServletRequest} in an appropriate wrapper class. * Wrap this {@link HttpServletRequest} in an appropriate wrapper class.
*/ */
public static FileUploadServletRequest parseRequest( public static FileUploadServletRequest parseRequest(
HttpServletRequest request, int maxFileSize) throws IOException { HttpServletRequest request, int maxFileSize) throws IOException,
FileUploadException {
boolean isMultipart = ServletFileUpload.isMultipartContent(request); boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) { if (isMultipart) {
return new MultipartHttpServletRequest(request, maxFileSize); return new MultipartHttpServletRequest(request, maxFileSize);

View file

@ -40,34 +40,29 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
* and the uploaded files. * and the uploaded files.
*/ */
public MultipartHttpServletRequest(HttpServletRequest request, public MultipartHttpServletRequest(HttpServletRequest request,
int maxFileSize) throws IOException { int maxFileSize) throws IOException, FileUploadException {
super(request); super(request);
Map<String, List<String>> parameters = new HashMap<String, List<String>>(); Map<String, List<String>> parameters = new HashMap<String, List<String>>();
Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>(); Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
try { File tempDir = figureTemporaryDirectory(request);
File tempDir = figureTemporaryDirectory(request); ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir);
ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir);
List<FileItem> items = parseRequestIntoFileItems(request, upload);
List<FileItem> items = parseRequestIntoFileItems(request, upload); for (FileItem item : items) {
for (FileItem item : items) { // Process a regular form field
// Process a regular form field if (item.isFormField()) {
if (item.isFormField()) { addToParameters(parameters, item.getFieldName(), item
addToParameters(parameters, item.getFieldName(), item .getString("UTF-8"));
.getString("UTF-8")); LOG.debug("Form field (parameter) " + item.getFieldName() + "="
LOG.debug("Form field (parameter) " + item.getFieldName() + item.getString());
+ "=" + item.getString()); } else {
} else { addToFileItems(files, item);
addToFileItems(files, item); LOG
LOG.debug("File " + item.getFieldName() + ": " .debug("File " + item.getFieldName() + ": "
+ item.getName()); + item.getName());
}
} }
} catch (FileUploadException e) {
String message = "Failed to parse a multipart-content request.";
LOG.error(message, e);
throw new IOException(message, e);
} }
this.parameters = Collections.unmodifiableMap(parameters); this.parameters = Collections.unmodifiableMap(parameters);
@ -77,7 +72,7 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
} }
/** /**
* Find the temporary storage directory for this webapp. * Find the temporary storage directory for this webapp.
*/ */
private File figureTemporaryDirectory(HttpServletRequest request) { private File figureTemporaryDirectory(HttpServletRequest request) {
return (File) request.getSession().getServletContext().getAttribute( return (File) request.getSession().getServletContext().getAttribute(