Hi michael

 protected Hashtable parseMulti(String boundary, ServletInputStream in)
throws IOException {

here what is the value for the String boundary.

Sankar


Michael Weller wrote:

> U can use this method to do the parsing for u:
>
>    protected Hashtable parseMulti(String boundary, ServletInputStream in)
> throws IOException {
>
>         int buffSize = 1024*8; // 8K
>         Hashtable hash = new Hashtable();
>         int result;
>         String line;
>         String lowerline;
>         String boundaryStr = "--"+boundary;
>         ByteArrayOutputStream content;
>         String filename;
>         String contentType;
>         String name;
>         String value;
>
>         byte[] b = new byte[buffSize];
>
>         result = in.readLine(b,0,b.length);
>         // failure.
>         if (result == -1)
>             throw new IllegalArgumentException("InputStream truncated");
>         line = new String(b,0,0,result);
>         // failure.
>         if (!line.startsWith(boundaryStr))
>            throw new IllegalArgumentException("MIME boundary missing: "+line);
>         while (true) {
>             // Some initialization
>             filename = null;
>             contentType = null;
>             content = new ByteArrayOutputStream();
>             name = null;
>
>             // get next line (should be content disposition)
>             result = in.readLine(b,0,b.length);
>             if (result == -1) return hash;
>             line = new String(b,0,0,result-2);
>             lowerline = line.toLowerCase();
>             if (!lowerline.startsWith("content-disposition"))
>                 // don't know what to do, so we'll keep looking...
>                 continue;
>             // determine what the disposition is
>             int ind = lowerline.indexOf("content-disposition: ");
>             int ind2 = lowerline.indexOf(";");
>             if (ind == -1 || ind2 == -1)
>                 throw new IllegalArgumentException(
>                     "Content Disposition line misformatted: "+line);
>             String disposition = lowerline.substring(ind+21,ind2);
>             if (!disposition.equals("form-data"))
>                 throw new IllegalArgumentException(
>                     "Content Disposition of "+disposition+" is not supported");
>             // determine what the name is
>             int ind3 = lowerline.indexOf("name=\"",ind2);
>             int ind4 = lowerline.indexOf("\"",ind3+7);
>             if (ind3 == -1 || ind4 == -1)
>                 throw new IllegalArgumentException(
>                     "Content Disposition line misformatted: "+line);
>             name = line.substring(ind3+6,ind4);
>             // determine filename, if any
>             int ind5 = lowerline.indexOf("filename=\"",ind4+2);
>             int ind6 = lowerline.indexOf("\"",ind5+10);
>             if (ind5 != -1 && ind6 != -1) {
>                 filename = line.substring(ind5+10,ind6);
>             }
>
>             // Whew!  We now move onto the next line, which
>             // will either be blank, or Content-Type, followed by blank.
>             result = in.readLine(b,0,b.length);
>             if (result == -1) return hash;
>             line = new String(b,0,0,result-2); // -2 to remove \r\n
>             lowerline = line.toLowerCase();
>             if (lowerline.startsWith("content-type")) {
>                 int ind7 = lowerline.indexOf(" ");
>                 if (ind7 == -1)
>                     throw new IllegalArgumentException(
>                         "Content-Type line misformatted: "+line);
>                 contentType = lowerline.substring(ind7+1);
>                 //  read blank header line
>                 result = in.readLine(b,0,b.length);
>                 if (result == -1) return hash;
>                 line = new String(b,0,0,result-2); // -2 to remove \r\n
>                 if (line.length() != 0) {
>                     throw new IllegalArgumentException(
>                         "Unexpected line in MIMEpart header: "+line);
>                 }
>             } else if (line.length() != 0) {
>                 throw new IllegalArgumentException(
>                     "Misformatted line following disposition: "+line);
>             }
>
>             //read content, implement readahead by one line
>             boolean readingContent = true;
>             boolean firstLine = true;
>             byte[] buffbytes = new byte[buffSize];
>             int buffnum = 0;
>
>             result = in.readLine(b,0,b.length);
>             if (result == -1) return hash;
>             line = new String(b,0,0,result);
>             if (!line.startsWith(boundaryStr)) {
>                 System.arraycopy(b,0,buffbytes,0,result);
>                 buffnum = result;
>                 result = in.readLine(b,0,b.length);
>                 if (result == -1) return hash;
>                 line = new String(b,0,0,result);
>                 firstLine = false;
>                 if (line.startsWith(boundaryStr)) {
>                     readingContent = false;
>                 }
>             } else {
>                 readingContent = false;
>             }
>
>             while (readingContent) {
>                 content.write(buffbytes,0,buffnum);
>                 System.arraycopy(b,0,buffbytes,0,result);
>                 buffnum = result;
>                 result = in.readLine(b,0,b.length);
>                 if (result == -1) return hash;
>                 line = new String(b,0,0,result);
>                 if (line.startsWith(boundaryStr)) readingContent = false;
>             }
>             if (!firstLine) {
>                 // -2 to trim \r\n
>                 if (buffnum>2)
>                     content.write(buffbytes,0,buffnum-2);
>             }
>
>             //now set appropriate variable, populate hashtable
>             if (filename == null) {
>                if (hash.get(name) == null) {
>                    String[] values = new String[1];
>                    values[0] = content.toString();
>                    hash.put(name,values);
>                } else {
>                    Object prevobj = hash.get(name);
>                    if (prevobj instanceof String[]) {
>                        String[] prev = (String[])prevobj;
>                        String[] newStr = new String[prev.length+1];
>                        System.arraycopy(prev,0,newStr,0,prev.length);
>                        newStr[prev.length] = content.toString();
>                        hash.put(name,newStr);
>                    } else {
>                      //now what? I think this breaks the standard.
>                      throw new IllegalArgumentException("failure in
> parseMulti hashtable building code");
>                    }
>                }
>             } else {
>                // Yes, we don't return Hashtable[] for multiple files of
> same name.  AFAIK, that's not allowed.
>                Hashtable filehash = new Hashtable(4);
>                filehash.put("name",name);
>                filehash.put("filename",filename);
>                if (contentType == null) contentType =
> "application/octet-stream";
>                filehash.put("content-type",contentType);
>                filehash.put("content",content.toByteArray());
>                hash.put(name,filehash);
>             }
>         }
>     }
>
> i think it's self-explanatory how to retrieve the values out of the
> returned Hashtable.
> i prefer this to jason hunter's classes.
>
> -mw
>
> At 12:12 11.06.2001 +0530, you wrote:
> >----- Original Message -----
> >From: "Ovais Ahmad Khan" <[EMAIL PROTECTED]>
> >To: <[EMAIL PROTECTED]>
> >
> > > now in the servlet's doPost method, i'm using the ServletInputStream to
> > > get the data but it's giving me the data in raw format, with all the
> > > headers,...
> >
> >That is why ServletInputStream is there. If you use this, you will have to
> >read the data from the inputstream and parse this InputStream to get the
> >file.
> >
> > > now does there exists some trick to get the real data (file) out of
> > > this.
> >
> >There is no trick in doing this. Just parsing the multi part request.
> >If you do not want to get into parsing the multi-part request, it is already
> >done for you by Jason Hunter.
> >His classes are available on the net at
> >http://www.servlets.com/cos/index.html
> >Jason has detailed these classes in his book Servlet Programming.
> >
> >Regds,
> >Gokul
> >
> > >
> > > thanks
> > > --
> > > Ovais
> >
> >___________________________________________________________________________
> >To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> >of the message "signoff SERVLET-INTEREST".
> >
> >Archives: http://archives.java.sun.com/archives/servlet-interest.html
> >Resources: http://java.sun.com/products/servlet/external-resources.html
> >LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
>
> ___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".

Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html

Reply via email to