Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

gsoft.xervlet
Class MultipartRequest  view MultipartRequest download MultipartRequest.java

java.lang.Object
  extended bygsoft.xervlet.MultipartRequest

public class MultipartRequest
extends java.lang.Object

A utility class to handle multipart/form-data requests, the kind of requests that support file uploads. This class can receive arbitrarily large files (up to an artificial limit you can set), and fairly efficiently too. It cannot handle nested data (multipart content within multipart content) or internationalized content (such as non Latin-1 filenames).

It's used like this:

 MultipartRequest multi = new MultipartRequest(req, ".");
  
 out.println("Params:");
 Enumeration params = multi.getParameterNames();
 while (params.hasMoreElements()) {
   String name = (String)params.nextElement();
   String value = multi.getParameter(name);
   out.println(name + " = " + value);
 }
 out.println();
  
 out.println("Files:");
 Enumeration files = multi.getFileNames();
 while (files.hasMoreElements()) {
   String name = (String)files.nextElement();
   String filename = multi.getFilesystemName(name);
   String type = multi.getContentType(name);
   File f = multi.getFile(name);
   out.println("name: " + name);
   out.println("filename: " + filename);
   out.println("type: " + type);
   if (f != null) {
     out.println("f.toString(): " + f.toString());
     out.println("f.getName(): " + f.getName());
     out.println("f.exists(): " + f.exists());
     out.println("f.length(): " + f.length());
     out.println();
   }
 }
 
A client can upload files using an HTML form with the following structure. Note that not all browsers support file uploads.
 <FORM ACTION="/servlet/Handler" METHOD=POST
          ENCTYPE="multipart/form-data">
 What is your name? <INPUT TYPE=TEXT NAME=submitter> <BR>
 Which file to upload? <INPUT TYPE=FILE NAME=file> <BR>
 <INPUT TYPE=SUBMIT>
 </FORM>
 

The full file upload specification is contained in experimental RFC 1867, available at http://ds.internic.net/rfc/rfc1867.txt.


Field Summary
private static int DEFAULT_MAX_POST_SIZE
           
private  java.io.File dir
           
private  java.util.Hashtable files
           
private  int maxSize
           
private  java.util.Hashtable parameters
           
private  javax.servlet.ServletRequest req
           
 
Constructor Summary
MultipartRequest(javax.servlet.ServletRequest request, java.lang.String saveDirectory)
           
MultipartRequest(javax.servlet.ServletRequest request, java.lang.String saveDirectory, int maxPostSize)
           
 
Method Summary
private  java.lang.String extractBoundary(java.lang.String line)
           
private  java.lang.String extractContentType(java.lang.String line)
           
private  java.lang.String[] extractDispositionInfo(java.lang.String line)
           
 java.lang.String getContentType(java.lang.String name)
           
 java.io.File getFile(java.lang.String name)
           
 java.util.Enumeration getFileNames()
           
 java.lang.String getFilesystemName(java.lang.String name)
           
 java.lang.String getParameter(java.lang.String name)
           
 java.util.Enumeration getParameterNames()
           
protected  void readAndSaveFile(MultipartInputStreamHandler in, java.lang.String boundary, java.lang.String filename)
           
protected  boolean readNextPart(MultipartInputStreamHandler in, java.lang.String boundary)
           
protected  java.lang.String readParameter(MultipartInputStreamHandler in, java.lang.String boundary)
           
protected  void readRequest()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_MAX_POST_SIZE

private static final int DEFAULT_MAX_POST_SIZE
See Also:
Constant Field Values

req

private javax.servlet.ServletRequest req

dir

private java.io.File dir

maxSize

private int maxSize

parameters

private java.util.Hashtable parameters

files

private java.util.Hashtable files
Constructor Detail

MultipartRequest

public MultipartRequest(javax.servlet.ServletRequest request,
                        java.lang.String saveDirectory)
                 throws java.io.IOException

MultipartRequest

public MultipartRequest(javax.servlet.ServletRequest request,
                        java.lang.String saveDirectory,
                        int maxPostSize)
                 throws java.io.IOException
Method Detail

getParameterNames

public java.util.Enumeration getParameterNames()

getFileNames

public java.util.Enumeration getFileNames()

getParameter

public java.lang.String getParameter(java.lang.String name)

getFilesystemName

public java.lang.String getFilesystemName(java.lang.String name)

getContentType

public java.lang.String getContentType(java.lang.String name)

getFile

public java.io.File getFile(java.lang.String name)

readRequest

protected void readRequest()
                    throws java.io.IOException

readNextPart

protected boolean readNextPart(MultipartInputStreamHandler in,
                               java.lang.String boundary)
                        throws java.io.IOException

readParameter

protected java.lang.String readParameter(MultipartInputStreamHandler in,
                                         java.lang.String boundary)
                                  throws java.io.IOException

readAndSaveFile

protected void readAndSaveFile(MultipartInputStreamHandler in,
                               java.lang.String boundary,
                               java.lang.String filename)
                        throws java.io.IOException

extractBoundary

private java.lang.String extractBoundary(java.lang.String line)

extractDispositionInfo

private java.lang.String[] extractDispositionInfo(java.lang.String line)
                                           throws java.io.IOException

extractContentType

private java.lang.String extractContentType(java.lang.String line)
                                     throws java.io.IOException