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:
parent
772de8c449
commit
0df8cdac42
3 changed files with 36 additions and 26 deletions
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Add table
Reference in a new issue