String boundary =
req.getContentType().substring(req.getContentType().indexOf("boundary=")+9);

At 17:32 11.06.2001 +0530, you wrote:
>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

___________________________________________________________________________
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