Re: Change request

"Kirk Daries" <[email protected]>
Newsgroups gmane.comp.java.enhydra.barracuda.general
Message-ID <[email protected]>
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.”
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.