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 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
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();

View file

@ -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);

View file

@ -40,13 +40,12 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
* and the uploaded files.
*/
public MultipartHttpServletRequest(HttpServletRequest request,
int maxFileSize) throws IOException {
int maxFileSize) throws IOException, FileUploadException {
super(request);
Map<String, List<String>> parameters = new HashMap<String, List<String>>();
Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
try {
File tempDir = figureTemporaryDirectory(request);
ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir);
@ -56,19 +55,15 @@ class MultipartHttpServletRequest extends FileUploadServletRequest {
if (item.isFormField()) {
addToParameters(parameters, item.getFieldName(), item
.getString("UTF-8"));
LOG.debug("Form field (parameter) " + item.getFieldName()
+ "=" + item.getString());
LOG.debug("Form field (parameter) " + item.getFieldName() + "="
+ item.getString());
} else {
addToFileItems(files, item);
LOG.debug("File " + item.getFieldName() + ": "
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);
LOG.debug("Parameters are: " + this.parameters);