Mirko Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Hallo, ich habe ein html-Formular, mit dem ich ein file an ein Servlet schicken will. Das html-file sieht ungefähr so aus ... <form action="servlet/XmlInputServlet" method=post enctype="multipart/form-data"> <p>Senden Sie eine Xml-Datei an den Host!</p> <input type=file size=1000 maxlength=50 name="file"><br> <input type=submit value="Absenden"> </form> ... Das Servlet wird korrekt aufgerufen. Allerdings kommen da anscheinend keine Parameter an. Zumindest bekomme ich das File nicht. Meine doPost methode im Servlet sieht so aus (soll erstmal gucken, überhaupt parameter ankommen: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { PrintWriter out = resp.getWriter(); Enumeration tempEnumeration = req.getParameterNames(); while (tempEnumeration.hasMoreElements()) { System.out.println("Element: " + tempEnumeration.nextElement()); } } Weiß jemand Rat??? Danke Gruß Mirko <FONT COLOR="#a62a2a" SIZE="1">[ 19. Dezember 2001 16:00: Beitrag 1 mal editiert, zuletzt von Mirko ]</font> Zitieren
Cyrill Geschrieben 19. Dezember 2001 Geschrieben 19. Dezember 2001 Hi Ja das kenne ich.. bin sozusagen auch gerade daran dieses Problem zu lösen einfach ein wenig weiter.. aber noch nicht ganz gelöst Aber da du das Formular mit enctype an den Server schickst musst du es auch speziell empfangen und zwar hat da oreilly ein gutes Servlet gebastelt das du so ungefäht übernhemen kannst! http://www.servlets.com/cos/index.html Mit dem MultipartParser kannst du diesen speziellen Request empfang und bearbeiten.. http://www.servlets.com/cos/javadoc/com/oreilly/servlet/multipart/MultipartParser.html Hier musst du dann überprüfen ob es ein File oder Parameter ist und dann speziell weiterverarbeiten.. und da bin ich jetzt auch stehen geblieben.. und zwar bekomme ich immer einen Fehler mit dem Boundary vielleicht kann mir da jemand helfen. Fehler: ****************************** [exec] Parse error, missing : in oundary=_OPERAB__-eQNKLp7oUo3j0vyFLfbHCX [exec] [exec] Full POST /geonet/servlet/ch.unizh.geo.geonet.ImageUploader HTTP/1.1 [exec] User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Linux 2.2.18 i686) Opera 5.0 [en]Host: localhost:8080Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0Referer: http://localhost:8080/geonet/servlet/ch.unizh.geo.geonet.HelptextControllerCookie: $Version=1; JSESSIONID=snr4n7qf21; $Path="/geonet"Connection: Keep-Alive, TETE: deflate, gzip, chunked, identity, trailersContent-length: 23017Content-Type: multipart/form-data; boundary=_OPERAB__-eQNKLp7oUo3j0vyFLfbHCX [exec] [exec] HelptextController.doPost(): req :org.apache.tomcat.facade.HttpServletRequestFacade@7e6a96 [exec] java.io.IOException: Separation boundary was not specified [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:135) [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:83) [exec] at ch.unizh.geo.geonet.ImageUploader.doPost(ImageUploader.java:40) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) [exec] at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405) [exec] at org.apache.tomcat.core.Handler.service(Handler.java:287) [exec] at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) [exec] at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812) [exec] at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758) [exec] at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213) [exec] at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) [exec] at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501) [exec] at java.lang.Thread.run(Thread.java:484) Zitieren
Mirko Geschrieben 20. Dezember 2001 Autor Geschrieben 20. Dezember 2001 Das ist ja schon mal ein guter Tipp. Da währe ich ja nicht drauf gekommen, dass das so kompliziert ist. Ich habe mir die Klassen runtergeladen und mal in mein Visual Age importiert. Naja, ich wühle mich mal weiter da durch. Bist du schon weitergekommen?? <FONT COLOR="#a62a2a" SIZE="1">[ 20. Dezember 2001 08:08: Beitrag 1 mal editiert, zuletzt von Mirko ]</font> Zitieren
Mirko Geschrieben 20. Dezember 2001 Autor Geschrieben 20. Dezember 2001 Also bei mir klappt das jetzt so. Bei mir geht es nur darum, das File in ein bestimmtes Verzeichnis auf dem Server abzulegen. und das funktioniert hiermit: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { MultipartParser tempParser = new MultipartParser(req, MAX_FILE_SIZE); Part tempPart; FilePart tempFilePart; tempPart = tempParser.readNextPart(); if (tempPart != null) { if (tempPart instanceof FilePart) { tempFilePart = (FilePart) tempPart; tempFilePart.writeTo(new FileOutputStream("c://xmltest//input//" + tempFilePart.getFileName())); } else { resp.sendError(400, "The servlet recieved a wrong paramter"); } } else { resp.sendError(400, "The servlet did not recieve a file"); } } Das Error-handling ist noch nicht so ganz sauber. Aber immerhin landet das File schon mal da, wo es soll. Danke nochmal für deine Hilfe. Schick doch mal Auszüge aus deinem Code, vielleicht finde ich ja den Fehler... Zitieren
Cyrill Geschrieben 21. Dezember 2001 Geschrieben 21. Dezember 2001 Hi Mein Code: ************************************ public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { if (DEBUG) System.out.println("HelptextController.doPost(): req:" + req ); try { MultipartParser multipart = new MultipartParser(req, 1024*10*10); Hashtable parameters = new Hashtable(); String mtype = null; InputStream is; Part p; while ((p = multipart.readNextPart()) != null) { if(p.isFile()) { FilePart fp = (FilePart) p; mtype = fp.getContentType(); is = fp.getInputStream(); } if(p.isParam()) { ParamPart pp = (ParamPart) p; parameters.put(pp.getName(), pp.getStringValue()); } } if (DEBUG) System.out.println("Mtype :" + mtype); String checksecond = (String) parameters.get("checksecond"); if (DEBUG) System.out.println("Checksecond :" + checksecond); } catch (Exception e) { if (DEBUG) e.printStackTrace(); } } ******************************************* Error den es gibt: ******************************************* [exec] HelptextController.doPost(): req :org.apache.tomcat.facade.HttpServletRequestFacade@2e533a [exec] java.io.IOException: Posted content type isn't multipart/form-data [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:119) [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:83) [exec] at ch.unizh.geo.geonet.ImageUploader.doPost(ImageUploader.java:40) [exec] at ch.unizh.geo.geonet.ImageUploader.doGet(ImageUploader.java:29) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) [exec] at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405) [exec] at org.apache.tomcat.core.Handler.service(Handler.java:287) [exec] at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) [exec] at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812) [exec] at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758) [exec] at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213) [exec] at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) [exec] at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501) [exec] at java.lang.Thread.run(Thread.java:484) [exec] Parse error, missing : in oundary=_OPERAB__-spr8CUaj5qCxZViWW9oHLS [exec] [exec] Full POST /geonet/servlet/ch.unizh.geo.geonet.ImageUploader HTTP/1.1 [exec] java.io.IOException: Separation boundary was not specified [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:135) [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:83) [exec] at ch.unizh.geo.geonet.ImageUploader.doPost(ImageUploader.java:40) [exec] User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Linux 2.2.18 i686) Opera 5.0 [en]Host: localhost:8080Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0Referer: http://localhost:8080/geonet/servlet/ch.unizh.geo.geonet.HelptextControllerCookie: $Version=1; JSESSIONID=lk9atntsd1; $Path="/geonet"Connection: Keep-Alive, TETE: deflate, gzip, chunked, identity, trailersContent-length: 23023Content-Type: multipart/form-data; boundary=_OPERAB__-spr8CUaj5qCxZViWW9oHLS [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) [exec] at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405) [exec] at org.apache.tomcat.core.Handler.service(Handler.java:287) [exec] at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) [exec] at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812) [exec] at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758) [exec] at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213) [exec] at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) [exec] at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501) [exec] at java.lang.Thread.run(Thread.java:484) ******************************************* Zitieren
Mirko Geschrieben 21. Dezember 2001 Autor Geschrieben 21. Dezember 2001 Hi, kann es sein, dass du im Formular nicht den richtigen enctype angegeben hast: ... enctype="multipart/form-data" ... Den brauchst du glaube ich, wenn du eine Datei übersenden willst. Zitieren
Cyrill Geschrieben 21. Dezember 2001 Geschrieben 21. Dezember 2001 Hi Nein, den hab ich auch... ähm ich hab gerdae bemerkt das ich einen falschen Error oder sozusagen zuviel im forum gepostet habe. es gibt nur folgendne error: ########### [exec] Parse error, missing : in oundary=_OPERAB__-/+/MwdkBK7OqAODFVteccF [exec] [exec] Full POST /geonet/servlet/ch.unizh.geo.geonet.ImageUploader HTTP/1.1 [exec] java.io.IOException: Separation boundary was not specified [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:135) [exec] User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Linux 2.2.18 i686) Opera 5.0 [en]Host: localhost:8080Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0Referer: http://localhost:8080/geonet/servlet/ch.unizh.geo.geonet.HelptextControllerCookie: $Version=1; JSESSIONID=upc52odnn1; $Path="/geonet"Connection: Keep-Alive, TETE: deflate, gzip, chunked, identity, trailersContent-length: 23024Content-Type: multipart/form-data; boundary=_OPERAB__-/+/MwdkBK7OqAODFVteccF [exec] at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:83) [exec] at ch.unizh.geo.geonet.ImageUploader.doPost(ImageUploader.java:40) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) [exec] at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) [exec] at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405) [exec] at org.apache.tomcat.core.Handler.service(Handler.java:287) [exec] at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372) [exec] at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:812) [exec] at org.apache.tomcat.core.ContextManager.service(ContextManager.java:758) [exec] at org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpConnectionHandler.java:213) [exec] at org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416) [exec] at org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501) [exec] at java.lang.Thread.run(Thread.java:484) [exec] [exec] HelptextController.doPost(): req :org.apache.tomcat.facade.HttpServletRequestFacade@2e533a Zitieren
Mirko Geschrieben 21. Dezember 2001 Autor Geschrieben 21. Dezember 2001 Tja, wo der Fehler auftritt hast du ja wahrscheinlich auch schon rausgefunden: /** * Extracts and returns the boundary token from a line. * * @return the boundary token. */ private String extractBoundary(String line) { // Use lastIndexOf() because IE 4.01 on Win98 has been known to send the // "boundary=" string multiple times. Thanks to David Wall for this fix. int index = line.lastIndexOf("boundary="); if (index == -1) { return null; } String boundary = line.substring(index + 9); // 9 for "boundary=" if (boundary.charAt(0) == '"') { // The boundary is enclosed in quotes, strip them index = boundary.lastIndexOf('"'); boundary = boundary.substring(1, index); } // The real boundary is always preceeded by an extra "--" boundary = "--" + boundary; return boundary; } Das scheint ja abhängig von Browser und Betriebssystem zu sein. Nur warum fehlt dieser Boundary ja anscheinende komplett. Wie sieht denn dein Formular aus? Zitieren
Cyrill Geschrieben 21. Dezember 2001 Geschrieben 21. Dezember 2001 Hi Momentan arbeite ich eigetnlich vorallem mit dem Opera Browser. Es sollte schon gehen das auch noch ander eFelder mit übergeben werden oder? Cyrill Formular: <form action="ch.unizh.geo.geonet.ImageUploader" method="post" enctype="multipart/form-data"> <input type="hidden" name="checksecond" value="new"> <input type="file" name="bilddatei"><br> <input type="text" name="bildname" maxlength="500">Imagename<br> <input type="text" name="descr" maxlength="500">Description<br> <input type="text" name="comm" maxlength="500">Comments<br> <br> <input type="radio" name="image" value="nimage" >Insert no more Images<br> <input type="radio" name="image" value="image" >Insert more Images<br><br> <input type="submit" name="submit" value="Insert Image"> </form> Zitieren
Mirko Geschrieben 21. Dezember 2001 Autor Geschrieben 21. Dezember 2001 Ich habe was gefunden. Und zwar ist das wohl ein Bug von Opera 5, der erst in Opera 5.12 behoben ist. Gefunden habe ich das hier Zitieren
Cyrill Geschrieben 21. Dezember 2001 Geschrieben 21. Dezember 2001 Hi Soso ist das also! Blödes opera Ja dann versuchs ich halt mit nem anderen Browser! Aber danke für die Hilfe! Gruss Cyrill Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.