Hi, I did not bother looking at the code, but is there a reason why you bother implementing this ? You could use the apache-commons fileupload implementation, that works just fine and has been tested and used in many websites.
David On Fri, Jul 17, 2009 at 3:48 PM, Petein<majestyel...@gmail.com> wrote: > > Hi. I have this servlet for file uploading. > > import java.io.DataInputStream; > > import java.io.File; > > import java.io.FileNotFoundException; > > import java.io.FileOutputStream; > > import java.io.IOException; > > import java.io.PrintWriter; > > > > import javax.servlet.ServletConfig; > > import javax.servlet.ServletException; > > import javax.servlet.http.HttpServlet; > > import javax.servlet.http.HttpServletRequest; > > import javax.servlet.http.HttpServletResponse; > > > > @SuppressWarnings("serial") > > public class myUploadServlet extends HttpServlet { > > > > public void init(ServletConfig config) throws ServletException { > > super.init(config); > > } > > > > public void doGet(HttpServletRequest request, HttpServletResponse > response) > > throws ServletException { > > > > } > > > > public void doPost(HttpServletRequest request, HttpServletResponse > response) > > throws ServletException { > > > > String contentType = request.getContentType(); > > > > if ((contentType != null) > > && (contentType.indexOf("multipart/form-data") > >= 0)) { > > DataInputStream in; > > byte dataBytes[]; > > try { > > in = new > DataInputStream(request.getInputStream()); > > > > // we are taking the length of Content type > data > > int formDataLength = > request.getContentLength(); > > dataBytes = new byte[formDataLength]; > > int byteRead = 0; > > int totalBytesRead = 0; > > // this loop converting the uploaded file into > byte code > > while (totalBytesRead < formDataLength) { > > byteRead = in.read(dataBytes, > totalBytesRead, > > formDataLength); > > totalBytesRead += byteRead; > > } > > > > } catch (IOException e) { > > e.printStackTrace(); > > return; > > } > > > > String file = new String(dataBytes); > > // for saving the file name > > String saveFile = > file.substring(file.indexOf("filename=\"") + 10); > > saveFile = saveFile.substring(0, > saveFile.indexOf("\n")); > > saveFile = > saveFile.substring(saveFile.lastIndexOf("\\") + 1, > > saveFile.indexOf("\"")); > > > > //System.out.println("saveFile = " + saveFile); > > int lastIndex = contentType.lastIndexOf("="); > > String boundary = contentType.substring(lastIndex + 1, > contentType > > .length()); > > int pos; > > // extracting the index of file > > pos = file.indexOf("filename=\""); > > pos = file.indexOf("\n", pos) + 1; > > pos = file.indexOf("\n", pos) + 1; > > pos = file.indexOf("\n", pos) + 1; > > int boundaryLocation = file.indexOf(boundary, pos) - 4; > > int startPos = ((file.substring(0, > pos)).getBytes()).length; > > int endPos = ((file.substring(0, > boundaryLocation)).getBytes > ()).length; > > > > // creating a new file with the same name and writing > the content > in > > // new file > > > > FileOutputStream fileOut; > > PrintWriter out = null; > > try { > > out = response.getWriter(); > > } catch (IOException e2) { > > // TODO Auto-generated catch block > > e2.printStackTrace(); > > } > > > > String path = "Images" + File.separator + saveFile; > > try { > > fileOut = new FileOutputStream(path); > > > > fileOut.write(dataBytes, startPos, (endPos - > startPos)); > > fileOut.flush(); > > fileOut.close(); > > } catch (FileNotFoundException e) { > > response.setContentType("text/html"); > > > response.setContentLength(e.getMessage().length()); > > out.println( /* e.getMessage() */"File Not > Found"); > > // e.printStackTrace(); > > return; > > } catch (IOException e) { > > response.setContentType("text/html"); > > > response.setContentLength(e.getMessage().length()); > > out.println( /* e.getMessage() */"Problem > reading the file"); > > // e.printStackTrace(); > > return; > > } > > > > File f = new File(path); > > if (f.length() == 0) { // empty file > > f.delete(); > > try { > > out = response.getWriter(); > > } catch (IOException e1) { > > e1.printStackTrace(); > > } > > response.setContentType("text/html"); > > String msg = "File is empty or doesnt exist"; > > response.setContentLength(msg.length()); > > out.println(msg); > > } else { > > response.setContentType("text/html"); > > String msg = "File: " + f.getName(); > > response.setContentLength(msg.length()); > > out.println(msg); > > } > > > > } > > > > } > > > > } > > > > It seems correct to my eyes but i get this error: > > <h2>HTTP ERROR: 500</h2><pre>INTERNAL_SERVER_ERROR</pre> > <p>RequestURI=/myfrwa/upload</p><h3>Caused by:</ > h3><pre>java.lang.IndexOutOfBoundsException > at java.io.FileOutputStream.writeBytes(Native Method) > at java.io.FileOutputStream.write(FileOutputStream.java:260) > at fr.server.myUploadServlet.doPost(myUploadServlet.java:94) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) > at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java: > 487) > at org.mortbay.jetty.servlet.ServletHandler.handle > (ServletHandler.java:362) > at org.mortbay.jetty.security.SecurityHandler.handle > (SecurityHandler.java:216) > at org.mortbay.jetty.servlet.SessionHandler.handle > (SessionHandler.java:181) > at org.mortbay.jetty.handler.ContextHandler.handle > (ContextHandler.java:729) > at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java: > 405) > at org.mortbay.jetty.handler.HandlerWrapper.handle > (HandlerWrapper.java:152) > at org.mortbay.jetty.handler.RequestLogHandler.handle > (RequestLogHandler.java:49) > at org.mortbay.jetty.handler.HandlerWrapper.handle > (HandlerWrapper.java:152) > at org.mortbay.jetty.Server.handle(Server.java:324) > at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java: > 505) > at org.mortbay.jetty.HttpConnection$RequestHandler.content > (HttpConnection.java:843) > at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) > at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) > at org.mortbay.jetty.HttpConnection.handl > > > Anyone who can tell me what is going on? > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---