commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Cooper <mfncoo...@gmail.com>
Subject Re: DiskFileUpload.parseRequest returns no items
Date Tue, 05 Oct 2004 04:28:13 GMT
Struts provides built-in support for file uploads, and always has
done. I believe most developers don't find that disappointing as much
as they find it useful. However, if you want to write your own version
of the same thing, you are free to do so. As I said, all you need to
do is disable Struts' multipart handling and then duplicate that
functionality in your own code instead. You will, of course, lose the
advantage of the many, many Struts developers who have used and tested
the code within Struts, but it's your choice. ;-)

If you have any further Struts related questions, please ask them on
the Struts User list rather than here.

--
Martin Cooper


On Mon, 04 Oct 2004 21:14:36 -0700, Michael McGrady
<mike@michaelmcgrady.com> wrote:
> Thanks, Martin.  That is a disappointing surprise.  That means that I am
> not going to be able to use Struts with my file upload application
> without disabling this portion of the framework.  I know people just
> don't seem to like my objections to some additions to the framework as
> "bloat" but this is worse.  This makes alternative uses of the commons
> packages impossible.  Is this a certainty?  If so, I am going to have to
> see how to disable the parsing in order to use my application.  What a
> pain!  Do you have any suggestions on a quick and easy way to do this?
> I guess I have some studying to do on this.  Maybe the best thing is
> just of forget about using ActionForms in this case because they are too
> coupled to this solution?  Back to the code.  I had no idea.  Thanks for
> your post.
> 
> Michael
> 
> 
> 
> Martin Cooper wrote:
> 
> >On Mon, 04 Oct 2004 21:02:38 -0700, Michael McGrady
> ><mike@michaelmcgrady.com> wrote:
> >
> >
> >>Hi, Martin,
> >>
> >>You are not saying, are you, Martin that you cannot use Struts and
> >>"worry about how to use" commons classes yourself?
> >>
> >>
> >
> >Yes, I am. Unless you deliberately disable Struts' multipart handling,
> >or you don't use an ActionForm, Struts will have already parsed the
> >input stream before your Action is invoked, leaving nothing for your
> >Action to parse.
> >
> >--
> >Martin Cooper
> >
> >
> >
> >
> >>For example, as in:
> >>
> >>package com.crackwillow.app.load.upload;
> >>
> >>import java.io.IOException;
> >>import java.util.Hashtable;
> >>import java.util.Iterator;
> >>import java.util.List;
> >>import java.util.Vector;
> >>
> >>import javax.servlet.http.HttpServletRequest;
> >>
> >>import org.apache.commons.fileupload.DiskFileUpload;
> >>import org.apache.commons.fileupload.FileItem;
> >>import org.apache.commons.fileupload.FileUploadException;
> >>
> >>import com.crackwillow.app.load.upload.UploadFileItem;
> >>import com.crackwillow.app.load.upload.UploadConstant;
> >>import com.crackwillow.log.StdOut;
> >>
> >>public class UploadParser {
> >>
> >> public UploadParser() {
> >> }
> >>
> >> public void parse(HttpServletRequest req,
> >>                   Vector             uploadListeners,
> >>                   int                fileSizeLimit,
> >>                   Hashtable          parameters,
> >>                   Hashtable          files,
> >>                   String             tmpFolder,
> >>                   String             encoding)
> >>     throws IOException {
> >>   DiskFileUpload dfu = new DiskFileUpload();
> >>   dfu.setSizeMax(fileSizeLimit);
> >>   dfu.setSizeThreshold(UploadConstant.MEMORY_BUFFER_SIZE);
> >>   dfu.setRepositoryPath(tmpFolder);
> >>   if(encoding != null) {
> >>     dfu.setHeaderEncoding(encoding);
> >>   }
> >>   List list = null;
> >>   try {
> >>     list = dfu.parseRequest(req);
> >>   } catch(FileUploadException fue) {
> >>     throw new IOException(fue.getMessage());
> >>   }
> >>   Object obj = null;
> >>   for(Iterator iter = list.iterator(); iter.hasNext();) {
> >>     FileItem fi = (FileItem)iter.next();
> >>     String fieldName = fi.getFieldName();
> >>     if(fi.isFormField()) {
> >>       String holder = null;
> >>       if(encoding != null) {
> >>         holder = fi.getString(encoding);
> >>       } else {
> >>         holder = fi.getString();
> >>       }
> >>       Vector params = (Vector)parameters.get(fieldName);
> >>       if(params == null) {
> >>         params = new Vector();
> >>         parameters.put(fieldName, params);
> >>       }
> >>       params.addElement(holder);
> >>     } else {
> >>       String fin = fi.getName();
> >>
> >>       if(fin != null) {
> >>         UploadFileItem ufi = new UploadFileItem(fi);
> >>         fin = fin.replace('\\', '/');
> >>         int j = fin.lastIndexOf("/");
> >>         if(j != -1) {
> >>           fin = fin.substring(j + 1, fin.length());
> >>         }
> >>         ufi.setFileName(fin);
> >>         ufi.setContentType(fi.getContentType());
> >>         ufi.setFileSize(fi.getSize());
> >>         files.put(fieldName, ufi);
> >>       }
> >>     }
> >>   }
> >> }
> >>}
> >>
> >>where UploadFileItem is a simple FileItem wrapper, as in:
> >>
> >>package com.crackwillow.app.load.upload;
> >>
> >>import java.io.BufferedInputStream;
> >>import java.io.InputStream;
> >>import java.io.IOException;
> >>import java.io.Serializable;
> >>
> >>import org.apache.commons.fileupload.FileItem;
> >>
> >>import com.crackwillow.log.StdOut;
> >>
> >>public class UploadFileItem
> >>   implements Serializable {
> >> private FileItem fi;
> >> private String   contentType;
> >> private String   fileName;
> >> private long     fileSize;
> >>
> >> public UploadFileItem()                            { this.fi = null; }
> >> public UploadFileItem(FileItem fi)                 { this.fi = fi; }
> >>
> >> public FileItem getFileItem()                      { return fi; }
> >> public long     getFileSize()                      { return fileSize; }
> >> public String   getFileName()                      { return fileName; }
> >> public String   getContentType()                   { return contentType; }
> >>
> >> public void     setFileSize(long fileSize)         { this.fileSize =
> >>fileSize; }
> >> public void     setFileName(String fileName)       { this.fileName =
> >>fileName; }
> >> public void     setContentType(String contentType) { this.contentType
> >>= contentType; }
> >>
> >> public InputStream getInputStream() {
> >>   if(fi == null) {
> >>     return null;
> >>   }
> >>
> >>   InputStream is = null;
> >>   try {
> >>     is = new BufferedInputStream(fi.getInputStream());
> >>   } catch (IOException ioe) {
> >>     StdOut.log("log.error",ioe.getMessage());
> >>   }
> >>   return is;
> >> }
> >>
> >> public byte[] getData() {
> >>   InputStream is = getInputStream();
> >>   if(is != null) {
> >>     int i = (int)getFileSize();
> >>     if(i > 0) {
> >>       byte data[] = new byte[i];
> >>       try {
> >>         is.read(data);
> >>         is.close();
> >>       } catch(IOException ioe) { }
> >>       return data;
> >>     } else {
> >>       return null;
> >>     }
> >>   } else {
> >>     return null;
> >>   }
> >> }
> >>
> >> public void reset() {
> >>   if(fi != null) {
> >>     fi.delete();
> >>   }
> >> }
> >>}
> >>
> >>Right?
> >>
> >>Michael McGrady
> >>
> >>
> >>
> >>
> >>Martin Cooper wrote:
> >>
> >>
> >>
> >>>File upload is already supported by Struts, so you don't have to worry
> >>>about how to use Commons FileUpload yourself. If you try to do so, the
> >>>result you are seeing is to be expected, since Struts has already
> >>>parsed the request, and it is no longer available for your code to
> >>>also parse.
> >>>
> >>>For information on how to use the file upload capabilities in Struts, see:
> >>>
> >>>http://wiki.apache.org/struts/StrutsFileUpload
> >>>
> >>>--
> >>>Martin Cooper
> >>>
> >>>
> >>>On Mon, 4 Oct 2004 10:04:16 -0400, Ivan Vasquez <ivan@itos.uga.edu>
wrote:
> >>>
> >>>
> >>>
> >>>
> >>>>I'm trying to use commons.fileupload from struts to avoid having
> >>>>uploaded files be part of the session.
> >>>>
> >>>>Following the simplest example I attempt to parsePequest but it does
not
> >>>>return any items. I verified the request and it does contains what I'm
> >>>>expecting. The form's enctype is multipart/form-data. I'm using the
> >>>>current release, 1.0.
> >>>>
> >>>>Thanks in advance.
> >>>>Ivan
> >>>>
> >>>>---------------------------------------------------------------------
> >>>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >>>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>---------------------------------------------------------------------
> >>>
> >>>
> >>
> >>
> >>>To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >>>For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >
> >---------------------------------------------------------------------
> 
> 
> >To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
> >For additional commands, e-mail: commons-user-help@jakarta.apache.org
> >
> >
> >
> >
> >
> >
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message