I would suggest you try the file upload debugging suggestions at
http://www.servlets.com/cos/faq.html.  Pls let us know what you figure
out.

-jh-

Gardner Monte wrote:
>
> Hello,
>   I am using Jason Hunters MultiPartParser to allow users
> to upload image files to an on-line Scrapbook.
> Because each user has his own directory to place pictures in,
> the directory to save the picture in is specified in the
> form inputs.  Specifically, I have a form with these input
> parameters in this order
>
> requesttype  -- a hidden input field
> category     -- indicates which directory to save the file in
> password     -- Each user has a password
> title        -- title of the picture
> caption      -- a caption for the picture
> file         -- the actual file input
>
> I use a while loop to read and analyze each part:
> -- if the part is a parameter part
>      save the value in the appropriate variable
> -- if the part is a file part
>      read the file into an array of bytes
> -- read the next part and continue the loop untill they are
>    all read
>
> here is the while loop code  (part of my doGet() method)
>
> MultipartParser mp = new MultipartParser(request, 1024*1024); // 100K???
>
> while ( (part = mp.readNextPart()) != null)
> {
>         if (part.isParam())
>         {
>                 ParamPart paramPart = (ParamPart) part;
>                 String value = paramPart.getStringValue();
>                 String name = paramPart.getName();
>                 if (verbose)
>                 {
>                         out.println("Parameter " + name + "=" + value +"\n");
>                 }
>                 //map form input values to appropriate variables
>                 if (name.equals("requesttype"))
>                         requestType = value;
>                 else if (name.equals("category") )
>                         category = value.toLowerCase();
>                 else if (name.equals("caption"))
>                         caption = value;
>                 else if (name.equals("title"))
>                         title = value;
>                 else if (name.equals("index"))
>                         index = Integer.parseInt(value);
>                 else if (name.equals("password"))
>                         password = value;
>         }//end if
>         else if (part.isFile())
>         {
>                 /**
>                 * The file data must be read in here before reading
>                 * the next part or it will be lost.  See
>                 * documentation for FilePart.getInputStream()
>                 *
>                 */
>                 FilePart filePart = (FilePart) part;
>                 if (verbose) out.println("Reading file: ");
>                 InputStream inStream = filePart.getInputStream();
>                 length  = inStream.read(fileData);
>                 if (verbose)
>                 {
>
>                         out.println("File Name: " + filePart.getFileName());
>                         out.println("Bytes read into Program: " + length);
>                         out.println("Max Bytes: " + maxBytes);
>                         out.println("Content Type: " +
> filePart.getContentType() + "\n");
>                 }
>                         fileName = filePart.getFileName();
>                         //check the content type:Gifs/Jpgs only
>                         String content = filePart.getContentType();
>                         if (!content.equals("image/jpeg") &&
>                             !content.equals("image/gif")  &&
>                             !content.equals("image/pjpeg"))
>                                throw new DataFormatException
>                                ("Files of type " + content + " are not
> allowed.");
>
>                         //check the size
>                         if (length > maxBytes)
>                                 throw new DataFormatException
>                                 ("The file " + fileName + " has a size of " +
> length +
>                                  ".  The maximum file Size is " + maxBytes);
>
>         }//end else
>         part = mp.readNextPart();
> }//end while
>
> When I run this servlet from a web Browser, I get the following output
> (note that it seems to be trying to read a filePart twice, even though
> there is only one file Input in  the form)
>
> Reading file:
> File Name: cheryse1.gif
> Bytes read into Program: 7618
> Max Bytes: 20000
> Content Type: image/gif
>
> Parameter password=admin
>
> Parameter caption=caption
>
> Parameter category=cheryse
>
> Parameter title=title
>
> Reading file:
> java.io.IOException: unexpected end of part
>         at PartInputStream.fill(PartInputStream.java:87)
>         at PartInputStream.read(PartInputStream.java:153)
>         at java.io.FilterInputStream.read(FilterInputStream.java:97)
>         at ScrapBookServlet.doPost(ScrapBookServlet.java:131)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java)
>         at
> org.apache.tomcat.facade.ServletHandler.doService(ServletHandler.java:497)
>         at org.apache.tomcat.core.Handler.invoke(Handler.java:322)
>         at org.apache.tomcat.core.Handler.service(Handler.java:235)
>         at
> org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:448)
>         at
> org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:918)
>         at
> org.apache.tomcat.core.ContextManager.service(ContextManager.java:831)
>         at
> 
>org.apache.tomcat.modules.server.Ajp13Interceptor.processConnection(Ajp13Interceptor.java:167)
>         at
> org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:478)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:517)
>         at java.lang.Thread.run(Thread.java:479)
>
> The exception occurs on the code
> length  = inStream.read(fileData);
>
> What causes a a MultiPartParser to throw a "unexpected end of part"??, and how
> can I avoid it?
>
> --Monte Glenn Gardner
>
> ___________________________________________________________________________
> 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