For anyone interested in an option, what I would like to do is given below. Anyone have any suggestions on the best way to do this and still use ActionForm, short of rewriting ActionForm? Thanks for any assistance. (The UploadFileItem is just a simple Serialized wrapper of commons' FileItem. This wrapper utilizes a buffered input stream.)


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);
           }
         }
       }
     }
   }

   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();
       }
     }
   }




Reply via email to