Re: Change request

Stefan Armbruster <[email protected]>
Newsgroups gmane.comp.java.enhydra.barracuda.general
Message-ID <[email protected]>
Hi,

I'm currently hacking some classes providing exactly this functionality.
My attempt is somewhat similar to Kirk's, I'm also using a custom
RequestWrapper. Additionally there's a UploadFormElement. I'll also
integrate this im my contrib application.

I'll post the code as soon as I've reached a stable state. Give me a few
days... since I'm about to relocate.

Regards,
Stefan

Am Mon, den 17.11.2003 schrieb Jancsi Farkas um 10:23:
> Yes, but what if the form has some other fields you require, along with 
> the uploaded files?
> Will barracuda form mapping still work?
> 
> This is what I did in my screen, in order to allow file upload together 
> with form mapping (I had to use form mapping, as the screen
> generator uses form mapping)
> 
> List items = new ArrayList();
> FormMap fm = new DefaultFormMap();
> 
> try
> {
> // Parse the request
> /* FileItem */ items = upload.parseRequest(req,
> 1024, 1024*1024*3, req.getRealPath("images/upload"));
> }
> catch(Exception ex)
> {
> ex.printStackTrace();
> }
> 
> Iterator it = items.iterator();
> while(it.hasNext())
> {
> FileItem item = (FileItem) it.next();
> if (item.isFormField())
> {
> String name = item.getFieldName();
> String value = item.getString();
> fm.putState(name,value);
> }
> if (!item.isFormField())
> {
> //process the file
> }
> }
> try
> {
> gf.map(fm).validate(true);
> }
> catch(ValidationException e)
> {
> ve = e;
> }
> 
> // from here everything goes as without file upload
> 
> Kirk Daries wrote:
> 
> >Hi,
> >
> >Also implemented Jakarta Commons Upload.
> >
> >Here's what I did...
> >Wrote my own RequestWrapper...
> >
> >package sitawc.barraframework.utils.fileupload;
> >
> >import org.apache.commons.fileupload.DefaultFileItemFactory;
> >import org.apache.commons.fileupload.FileUpload;
> >import org.apache.commons.fileupload.FileUploadException;
> >
> >import javax.servlet.http.HttpServletRequest;
> >import javax.servlet.http.HttpServletRequestWrapper;
> >import java.io.File;
> >import java.util.List;
> >
> >/**
> > * A simple upload wrapper for the Servlet Request
> > */
> >public class FileUploadMultipartRequest extends
> >HttpServletRequestWrapper implements HttpServletRequest {
> >  private FileUpload fileUpload;
> >  private String destinationDirString;
> >  private File destinationDir;
> >  private HttpServletRequest httpServletRequest;
> >  private List fileItems;
> >  private DefaultFileItemFactory defaultFileItemFactory;
> >
> >  public FileUploadMultipartRequest(String destinationDir,
> >HttpServletRequest httpServletRequest) {
> >    super(httpServletRequest);
> >    this.fileUpload = new FileUpload();
> >    this.destinationDirString = destinationDir;
> >    this.httpServletRequest = httpServletRequest;
> >    this.defaultFileItemFactory = new DefaultFileItemFactory();
> >    this.destinationDir = new File(this.destinationDirString);
> >  }
> >
> >  /**
> >   * @return Returns a refenrence to the file upload object
> >   */
> >  public FileUpload getFileUpload() {
> >    return fileUpload;
> >  }
> >
> >  /**
> >   * The actual processing method
> >   * @throws FileUploadException
> >   */
> >  public void parseRequest() throws FileUploadException {
> >    this.fileItems = null;
> >
> >    this.defaultFileItemFactory.setRepository(this.destinationDir);
> >    this.defaultFileItemFactory.setSizeThreshold(4096);
> >
> >    this.fileUpload.setFileItemFactory(this.defaultFileItemFactory);
> >    this.fileUpload.setSizeMax(1000000);
> >
> >    // maximum size that will be stored in memory
> >    this.fileItems =
> >this.fileUpload.parseRequest(this.httpServletRequest);
> >  }
> >
> >  /**
> >   * Returns a list of fileItems that were found in the request...
> >   * @return
> >   */
> >  public List getFileItems() {
> >    return this.fileItems;
> >  }
> >}
> >
> >
> >Installed my wrapper in my application gateway,
> >Note: installHttpRequestWrapper is called in initializeLocal.
> >
> >  private void installHttpRequestWrapper() {
> >    File tempDir;
> >    tempDir =
> >(File)getServletConfig().getServletContext().getAttribute("javax.servlet.context.tempdir");
> >    REQUEST_WRAPPER = new
> >FileUploadWrapper(tempDir.getAbsolutePath());
> >  }
> >
> >
> >  public static class FileUploadWrapper implements RequestWrapper {
> >    private String destinationDir;
> >    public FileUploadWrapper(String destinationDir) {
> >      this.destinationDir = destinationDir;
> >    }
> >    public HttpServletRequestWrapper wrap(HttpServletRequest
> >httpServletRequest) {
> >      return new HttpServletRequestWrapper(new
> >FileUploadMultipartRequest(destinationDir, httpServletRequest));
> >    }
> >  }
> >
> >
> >In my top-most RequestEvent_Listener, I have the following code,
> >
> >
> >    if (FileUpload.isMultipartContent(req)) {
> >        FileUploadMultipartRequest  fileUploadMultipartRequest = 
> >(FileUploadMultipartRequest) ((HttpServletRequestWrapper)
> >req).getCoreRequest();
> >
> >        try {
> >          fileUploadMultipartRequest.parseRequest();
> >        } catch (FileUploadException fue) {
> >          if (logger.isEnabledFor(Priority.ERROR))
> >logger.error("FileUploadException: " + fue.getMessage());
> >        }
> >
> >        List fileItems = null;
> >        Iterator i;
> >        FileItem fileItem;
> >
> >
> >        fileItems = fileUploadMultipartRequest.getFileItems();
> >        i = fileItems.iterator();
> >
> >        while (i.hasNext()) {
> >          fileItem = (FileItem)i.next();
> >
> >          if (fileItem.isFormField()) {
> >
> >            parms.put(fileItem.getFieldName() ,
> >processSpecialUrlCharacters(fileItem.getString(), false));
> >
> >            if (logger.isDebugEnabled()) logger.debug("parm - " +
> >fileItem.getFieldName() + " : " + (String)
> >parms.get(fileItem.getFieldName()));
> >
> >          } else {
> >            if (logger.isDebugEnabled()) logger.debug("File - " +
> >fileItem.getName());
> >          }
> >        }
> >    }
> >
> >Basically, if the request Content is MultiPart, Cast to
> >FileUploadMultipartRequest  and call 'parseReqest'.
> >Also logs the param and files to the log file.
> >
> >Further down the event tree I simply just cast to the Wrapper Again,
> >and call the 'getFileItems' method.
> >This is the actual class that does the 'processing'
> >E.g.
> >
> >    FileUploadMultipartRequest fileUploadMultipartRequest =
> >(FileUploadMultipartRequest) ((HttpServletRequestWrapper)
> >req).getCoreRequest();
> >    fileUploadMultipartRequest.getFileItems();
> >
> >    List fileItems = null;
> >    Iterator i;
> >    FileItem lfileItem;
> >    lfileItem = null;
> >
> >    fileItems = fileUploadMultipartRequest.getFileItems();
> >    i = fileItems.iterator();
> >
> >    while (i.hasNext()) {
> >      lfileItem = (FileItem)i.next();
> >
> >      if (!lfileItem.isFormField()) {
> >        //Do your processing here!
> >      }
> >    }
> >
> >
> >Hope that Helps
> >Regards
> >KD
> >
> >  
> >
> >>>>[email protected] 2003/11/14 16:40:32 >>>
> >>>>        
> >>>>
> >Anyway is pretty easy to integrate. Only have to be careful, if is 
> >multipart request, put manually param requests back to context, and 
> >everything works like charm. (or at least worked for me :D)
> >I can send some samples later, when i'll be home, if anybody is
> >interested.
> >
> >Jancsi
> >
> >Diez B. Roggisch wrote:
> >
> >  
> >
> >>Jancsi Farkas wrote:
> >>
> >>    
> >>
> >>>Yes I have used with barracuda, it is very easy to integrate.
> >>>(I was about to ask why is not used :) )
> >>>      
> >>>
> >>
> >>Most probably because I didn't find it back two years ago :-)
> >>
> >>Regards,
> >>
> >>Diez
> >>
> >>
> >>
> >>_______________________________________________
> >>Barracuda mailing list
> >>[email protected] 
> >>http://barracudamvc.org/lists/listinfo/barracuda
> >>
> >>    
> >>
> >
> >_______________________________________________
> >Barracuda mailing list
> >[email protected] 
> >http://barracudamvc.org/lists/listinfo/barracuda
> >---------------------------------------------------------------
> >ā€œAll views or opinions expressed in this electronic message 
> >and its attachments are the view of the sender and do not 
> >necessarily reflect the views and opinions of the 
> >Provincial Government Western Cape (ā€œthe PGWCā€).  
> >No employee of the WCPG is entitled to conclude a 
> >binding contract on behalf of the PGWC unless he/she 
> >is an Accounting Officer of the PGWC, or his or her 
> >authorised representative.
> >
> >The information contained in this message and its attachments 
> >may be confidential or privileged and is for the use of the 
> >named recipient only, except where the sender specifically 
> >states otherwise.  If you are not the intended recipient you 
> >may not copy or deliver this message to anyone.ā€
> >
> >_______________________________________________
> >Barracuda mailing list
> >[email protected]
> >http://barracudamvc.org/lists/listinfo/barracuda
> >
> >  
> >
> 
> _______________________________________________
> Barracuda mailing list
> [email protected]
> http://barracudamvc.org/lists/listinfo/barracuda
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.