commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael McGrady <m...@michaelmcgrady.com>
Subject Re: DiskFileUpload.parseRequest returns no items
Date Tue, 05 Oct 2004 04:32:55 GMT
Thanks, again, Martin.  I do think that my concerns are clearly related 
to commons upload, since they are questions about how it can be 
implemented, even if that is related to Struts.  No?  I do want to make 
it clear that I am not criticising the solution the Struts people use.  
I am merely talking about room for growth, alternatives, etc.  Different 
people, as you know, have different requirements.  That is what is nice 
about commons.  Michael McGrady

Martin Cooper wrote:

>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
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message