From 0df8cdac42233d254ff9717895f3612c6dbb4136 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Thu, 27 May 2010 20:03:39 +0000 Subject: [PATCH] NIHVIVO-160 Pass the FileUploadException through to the caller. The user particularly needs to see it if it is FileSizeExceeded or RequestSizeExceeded. --- .../controller/edit/N3MultiPartUpload.java | 16 +++++++- .../FileUploadServletRequest.java | 5 ++- .../MultipartHttpServletRequest.java | 41 ++++++++----------- 3 files changed, 36 insertions(+), 26 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java index cdbeefffd..e6abc28ec 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java @@ -19,6 +19,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -114,8 +115,19 @@ public class N3MultiPartUpload extends VitroHttpServlet { throws ServletException, IOException { log.debug("N3MultiPartProcess 0.01"); - FileUploadServletRequest request = FileUploadServletRequest - .parseRequest(rawRequest, maxFileSize); + FileUploadServletRequest request = null; + 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()); ServletContext application = getServletContext(); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java index 2684acfd0..df5bf2036 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/FileUploadServletRequest.java @@ -18,6 +18,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; 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; /** @@ -41,7 +43,8 @@ public abstract class FileUploadServletRequest implements HttpServletRequest { * Wrap this {@link HttpServletRequest} in an appropriate wrapper class. */ public static FileUploadServletRequest parseRequest( - HttpServletRequest request, int maxFileSize) throws IOException { + HttpServletRequest request, int maxFileSize) throws IOException, + FileUploadException { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { return new MultipartHttpServletRequest(request, maxFileSize); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java index bf6755393..57f828832 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/filestorage/uploadrequest/MultipartHttpServletRequest.java @@ -40,34 +40,29 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { * and the uploaded files. */ public MultipartHttpServletRequest(HttpServletRequest request, - int maxFileSize) throws IOException { + int maxFileSize) throws IOException, FileUploadException { super(request); Map> parameters = new HashMap>(); Map> files = new HashMap>(); - try { - File tempDir = figureTemporaryDirectory(request); - ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir); - - List items = parseRequestIntoFileItems(request, upload); - for (FileItem item : items) { - // Process a regular form field - if (item.isFormField()) { - addToParameters(parameters, item.getFieldName(), item - .getString("UTF-8")); - LOG.debug("Form field (parameter) " + item.getFieldName() - + "=" + item.getString()); - } else { - addToFileItems(files, item); - LOG.debug("File " + item.getFieldName() + ": " - + item.getName()); - } + File tempDir = figureTemporaryDirectory(request); + ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir); + + List items = parseRequestIntoFileItems(request, upload); + for (FileItem item : items) { + // Process a regular form field + if (item.isFormField()) { + addToParameters(parameters, item.getFieldName(), item + .getString("UTF-8")); + LOG.debug("Form field (parameter) " + item.getFieldName() + "=" + + item.getString()); + } else { + addToFileItems(files, item); + LOG + .debug("File " + item.getFieldName() + ": " + + 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); @@ -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) { return (File) request.getSession().getServletContext().getAttribute(