NIHVIVO-161 - If the user tries to upload a file that is too large, return a friendly error message.
This commit is contained in:
parent
6cffc40c33
commit
b0e72fb0e9
2 changed files with 27 additions and 15 deletions
|
@ -17,7 +17,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
|
@ -46,15 +45,20 @@ public class ImageUploadController extends FreeMarkerHttpServlet {
|
||||||
|
|
||||||
public static final String DUMMY_THUMBNAIL_URL = "/images/dummyImages/person.thumbnail.jpg";
|
public static final String DUMMY_THUMBNAIL_URL = "/images/dummyImages/person.thumbnail.jpg";
|
||||||
|
|
||||||
/** Limit file size to 50 megabytes. */
|
/** Limit file size to 6 megabytes. */
|
||||||
public static final int MAXIMUM_FILE_SIZE = 50 * 1024 * 1024;
|
public static final int MAXIMUM_FILE_SIZE = 6 * 1024 * 1024;
|
||||||
|
|
||||||
/** Generated thumbnails will be this big. */
|
/** Generated thumbnails will be this big. */
|
||||||
public static final int THUMBNAIL_HEIGHT = 115;
|
public static final int THUMBNAIL_HEIGHT = 115;
|
||||||
public static final int THUMBNAIL_WIDTH = 115;
|
public static final int THUMBNAIL_WIDTH = 115;
|
||||||
|
|
||||||
|
/** The form field that tells what we are doing: uploading? deleting? */
|
||||||
public static final String PARAMETER_ACTION = "action";
|
public static final String PARAMETER_ACTION = "action";
|
||||||
|
|
||||||
|
/** The form field that identifies the Individual. */
|
||||||
public static final String PARAMETER_ENTITY_URI = "entityUri";
|
public static final String PARAMETER_ENTITY_URI = "entityUri";
|
||||||
|
|
||||||
|
/** The form field of the uploaded file; use as a key to the FileItem map. */
|
||||||
public static final String PARAMETER_UPLOADED_FILE = "datafile";
|
public static final String PARAMETER_UPLOADED_FILE = "datafile";
|
||||||
|
|
||||||
public static final String ACTION_SAVE = "save";
|
public static final String ACTION_SAVE = "save";
|
||||||
|
@ -133,21 +137,18 @@ public class ImageUploadController extends FreeMarkerHttpServlet {
|
||||||
throws IOException, ServletException {
|
throws IOException, ServletException {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FileUploadServletRequest parsedRequest = FileUploadServletRequest
|
// Parse the multi-part request.
|
||||||
.parseRequest(request, MAXIMUM_FILE_SIZE);
|
request = FileUploadServletRequest.parseRequest(request,
|
||||||
|
MAXIMUM_FILE_SIZE);
|
||||||
if (log.isTraceEnabled()) {
|
if (log.isTraceEnabled()) {
|
||||||
dumpRequestDetails(parsedRequest);
|
dumpRequestDetails(request);
|
||||||
}
|
|
||||||
} catch (FileUploadException e) {
|
|
||||||
// Swallow the exception here. Test for FILE_ITEM_MAP later.
|
|
||||||
log.error("Failed to parse the multi-part HTTP request", e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
// Do setup defined in VitroHttpServlet
|
||||||
// do setup defined in VitroHttpServlet
|
|
||||||
setup(request);
|
setup(request);
|
||||||
|
|
||||||
VitroRequest vreq = new VitroRequest(request);
|
VitroRequest vreq = new VitroRequest(request);
|
||||||
|
|
||||||
ResponseValues values = buildTheResponse(vreq);
|
ResponseValues values = buildTheResponse(vreq);
|
||||||
|
|
||||||
// They can't do this if they aren't logged in.
|
// They can't do this if they aren't logged in.
|
||||||
|
@ -402,8 +403,8 @@ public class ImageUploadController extends FreeMarkerHttpServlet {
|
||||||
* if this is null, then all URLs lead to the welcome page.
|
* if this is null, then all URLs lead to the welcome page.
|
||||||
*/
|
*/
|
||||||
private TemplateResponseValues showAddImagePage(Individual entity) {
|
private TemplateResponseValues showAddImagePage(Individual entity) {
|
||||||
String formAction = (entity == null) ? "" : formAction(
|
String formAction = (entity == null) ? "" : formAction(entity.getURI(),
|
||||||
entity.getURI(), ACTION_UPLOAD);
|
ACTION_UPLOAD);
|
||||||
String cancelUrl = (entity == null) ? "" : displayPageUrl(entity
|
String cancelUrl = (entity == null) ? "" : displayPageUrl(entity
|
||||||
.getURI());
|
.getURI());
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,12 @@
|
||||||
|
|
||||||
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker;
|
||||||
|
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.MAXIMUM_FILE_SIZE;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.PARAMETER_UPLOADED_FILE;
|
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.PARAMETER_UPLOADED_FILE;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.THUMBNAIL_HEIGHT;
|
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.THUMBNAIL_HEIGHT;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.THUMBNAIL_WIDTH;
|
import static edu.cornell.mannlib.vitro.webapp.controller.freemarker.ImageUploadController.THUMBNAIL_WIDTH;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest.FILE_ITEM_MAP;
|
||||||
|
import static edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest.FileUploadServletRequest.FILE_UPLOAD_EXCEPTION;
|
||||||
|
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
|
@ -86,8 +89,16 @@ public class ImageUploadHelper {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
FileItem validateImageFromRequest(HttpServletRequest request)
|
FileItem validateImageFromRequest(HttpServletRequest request)
|
||||||
throws UserMistakeException {
|
throws UserMistakeException {
|
||||||
|
Object exception = request.getAttribute(FILE_UPLOAD_EXCEPTION);
|
||||||
|
if (exception != null) {
|
||||||
|
int limit = MAXIMUM_FILE_SIZE / (1024 * 1024);
|
||||||
|
throw new UserMistakeException(
|
||||||
|
"Please upload an image smaller than " + limit
|
||||||
|
+ " megabytes");
|
||||||
|
}
|
||||||
|
|
||||||
Map<String, List<FileItem>> map = (Map<String, List<FileItem>>) request
|
Map<String, List<FileItem>> map = (Map<String, List<FileItem>>) request
|
||||||
.getAttribute(FileUploadServletRequest.FILE_ITEM_MAP);
|
.getAttribute(FILE_ITEM_MAP);
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
throw new IllegalStateException("Failed to parse the "
|
throw new IllegalStateException("Failed to parse the "
|
||||||
+ "multi-part request for uploading an image.");
|
+ "multi-part request for uploading an image.");
|
||||||
|
|
Loading…
Add table
Reference in a new issue