SingleFileUPloadCommonsPart: Draft
package com.ai.parts;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
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.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.ai.application.interfaces.ConfigException;
import com.ai.application.interfaces.IInitializable;
import com.ai.application.interfaces.RequestExecutionException;
import com.ai.application.utils.AppObjects;
public class SingleFileUPloadCommonsPart extends AHttpPart implements IInitializable
{
private String FILE_UPLOAD_CONTEXT = "aspire.global-defaults.fileupload.";
String sMaxMemorySizeInKb = "1000";
String sMaxRequestSizeInMb = "10";
String tempDirectory = "";
public void initialize(String requestName)
{
fillDefaultSizes(requestName);
}
private void fillDefaultSizes(String requestName)
{
try
{
sMaxMemorySizeInKb
= AppObjects.getValue(this.FILE_UPLOAD_CONTEXT +
".MaxMemorySizeInKb","1000");
sMaxRequestSizeInMb
= AppObjects.getValue(this.FILE_UPLOAD_CONTEXT +
".maxRequestSizeInMb","10");
tempDirectory
= AppObjects.getValue(this.FILE_UPLOAD_CONTEXT +
".tempDirectory");
}
catch(ConfigException x)
{
throw new RuntimeException("Could not locate temp directory in config file for file upload");
}
}
private int getMaxMemorySizeInBytes(String requestName)
{
String lsMaxMemorySizeInKb = AppObjects.getValue(requestName +
".maxMemorySizeInKb",this.sMaxMemorySizeInKb);
return Integer.parseInt(lsMaxMemorySizeInKb) * 1000;
}
private long getMaxRequestSizeInBytes(String requestName)
{
String lsMaxRequestSizeInMb = AppObjects.getValue(requestName +
".maxRequestSizeInMb",this.sMaxRequestSizeInMb);
return Long.parseLong(lsMaxRequestSizeInMb) * 1000000;
}
protected Object executeRequestForHttpPart(String requestName
,HttpServletRequest request
,HttpServletResponse response
,HttpSession session
,Map inArgs)
throws RequestExecutionException
{
try
{
AppObjects.info(this,"Single file upload invoked");
//look at the form field name
String fileuploadFieldName = AppObjects.getValue(requestName +
".fileUploadFormFieldName","filename");
//Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
//Parse the request
factory.setSizeThreshold(this.getMaxMemorySizeInBytes(requestName));
factory.setRepository(new File(this.tempDirectory));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(this.getMaxRequestSizeInBytes(requestName));
List fileItems = upload.parseRequest(request);
Iterator iter = fileItems.iterator();
while (iter.hasNext())
{
FileItem item = (FileItem) iter.next();
if (item.isFormField())
{
processFormField(item, inArgs);
}
else
{
processFileItem(item, inArgs);
}
}
return new Boolean(true);
}
catch(FileUploadException x)
{
throw new RequestExecutionException("Parsing the uploaded file", x);
}
}//eof-function
private void processFormField(FileItem fi, Map args)
{
//form field name
String fieldname = fi.getFieldName();
String fieldvalue = fi.getString();
//place field in the args
args.put(fieldname.toLowerCase(), fieldvalue);
}
private void processFileItem(FileItem fi, Map args)
{
//form field name
String fieldname = fi.getFieldName();
//place file item in the hashtable
AppObjects.info(this,"Placing a file item for " + fieldname + " into the hashtable");
args.put(fieldname.toLowerCase(), fi);
}
}