NIHVIVO-160 Use the temporary directory for files that are too big to hold in memory.

This commit is contained in:
jeb228 2010-05-27 19:48:35 +00:00
parent 99a080ad3f
commit 772de8c449

View file

@ -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<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
try {
ServletFileUpload upload = createUploadHandler(maxFileSize);
File tempDir = figureTemporaryDirectory(request);
ServletFileUpload upload = createUploadHandler(maxFileSize, tempDir);
List<FileItem> 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);