From 772de8c4494cd85ce6ee820dedb35d6725e98dc3 Mon Sep 17 00:00:00 2001 From: jeb228 Date: Thu, 27 May 2010 19:48:35 +0000 Subject: [PATCH] NIHVIVO-160 Use the temporary directory for files that are too big to hold in memory. --- .../MultipartHttpServletRequest.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) 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 c1b6e779a..bf6755393 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 @@ -2,6 +2,7 @@ package edu.cornell.mannlib.vitro.webapp.filestorage.uploadrequest; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -14,7 +15,6 @@ import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; @@ -47,7 +47,9 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { Map> files = new HashMap>(); try { - ServletFileUpload upload = createUploadHandler(maxFileSize); + File tempDir = figureTemporaryDirectory(request); + ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir); + List items = parseRequestIntoFileItems(request, upload); for (FileItem item : items) { // Process a regular form field @@ -74,13 +76,22 @@ class MultipartHttpServletRequest extends FileUploadServletRequest { LOG.debug("Files are: " + this.files); } + /** + * Find the temporary storage directory for this webapp. + */ + private File figureTemporaryDirectory(HttpServletRequest request) { + return (File) request.getSession().getServletContext().getAttribute( + "javax.servlet.context.tempdir"); + } + /** * Create an upload handler that will throw an exception if the file is too * large. */ - private ServletFileUpload createUploadHandler(int maxFileSize) { + private ServletFileUpload createUploadHandler(int maxFileSize, File tempDir) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(maxFileSize); + factory.setRepository(tempDir); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(maxFileSize);