I'm using Struts 1.1, and trying to use the commons file upload version
1 package (from http://jakarta.apache.org/commons/fileupload/index.html
) to handle
file upload request in my application, yet I seemed to always get an
empty List from the parseRequest function of the
org.apache.commons.fileupload.DiskFileUpload class, although the method
isMultiPartContent returns true!!!!
I am handling file uploads in a class name uploadAction, which extends
from org.apache.struts.action.Action class. Is it inappropriate to
implement the fileupload in a
Action subclass!? If so, how should I go about solving the problem
using strut's ActionServlet/Action model and file upload packages
together!?
<html:form action="/upload" method="POST" enctype="multipart/form-data">
problem is I always get an empty fileItem list returned from
parseRequest(). I used this way as I didn't get struts uploader to work
just in memory and don't write on disk :(
The following is my uploadAction class:
package com.bat.upload.action;
import com.bat.common.action.BaseAction;
import com.bat.upload.form.UploadForm;
import java.io.*;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.commons.fileupload.*;
public class UploadAction extends BaseAction
{
public UploadAction()
{
}
public ActionForward perform(ActionMapping mapping, ActionForm f,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
try
{
// returns true
boolean isMultipart = FileUpload.isMultipartContent( request );
DiskFileUpload fu = new DiskFileUpload();
// maximum size before a FileUploadException will be thrown
fu.setSizeMax(10000000);
// maximum size that will be stored in memory
fu.setSizeThreshold(2000000);
List fileItems = fu.parseRequest(request);
// Empty iterator received
Iterator i = fileItems.iterator();
while ( i.hasNext() )
{
FileItem fileItem = (FileItem)i.next();
if ( fileItem.isFormField )
{
// Do something
} else {
// Do anotherthing
}
}
return mapping.findForward( "upload_completed" );
}
catch(FileUploadException fue)
{
throw new ServletException("FileUploadError: " + fue.getMessage(),
fue);
}
catch(Exception e)
{
throw new ServletException("FileWriteError", e);
}
}
ActionForward forwardResult = new ActionForward(mapping.getInput());
return forwardResult;
}
}
Thanks, best regards