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

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,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<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);
List<FileItem> 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<FileItem> 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(