fileupload - jakarta.commons.fileupload

Status
Nicht offen für weitere Antworten.

nauni77

Mitglied
Hallo,
ich schreibe eine Web-Applikation mit JSPs (Tomcat-Server). Mein Problem ist das hochladen von Dateien - vom Client zum Server.

Das Formular, welches das File zum uploaden aussucht sieht wie folgt aus (Browser: Mozilla Firefox):

Code:
<h1>Hochladen einer Datei</h1>
        
<form action=<%= request.getRequestURL()%> method="post" 
ENCTYPE='multipart/form-data'>
        Datei: <input type="file" size="50" name="datei" maxlength="10000" 
accept="text/*"/>

        <input type="submit" name="action" value="upload file" />
</form>

Jetzt versuche ich die Multipart-Message zu parsen:
Code:
if (FileUpload.isMultipartContent(request)) {
        try {
                // ENCTYPE='multipart/form-data' Daten rauslesen!!!
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upl = new ServletFileUpload(factory);
                java.util.List items = upl.parseRequest(request);
                .........

Ohne die Letzte Zeile ist das JSP ohne Fehler ausführbar (natürlich ohne die korrekte Funktion). Aber _mit_ dem parseRequest(request) bekomme ich immer ein Fehler ... ich habe keine Ahnung mehr was ich noch probieren kann.

Hoffe es kann mir jemand helfen. Bei Bedarf poste ich auch die gesamte JSP (habe ich noch nicht gemacht, da ich denke so ist es übersichtlicher).

tia

Oli

PS:
Ich denke alles so gemacht zu haben wie unter
http://jakarta.apache.org/commons/fileupload/using.html beschrieben.
 

nauni77

Mitglied
Hallo,
Danke für den Tipp! :)

Denke jedoch nicht, dass ich vorher etwas aufgerufen habe. Zur Sicherheit "im Anhang" der komplette Code ... falls jemand einen Tomcat am laufen hat, wäre es prima, wenn er es mal ausprobieren könnte .... nicht dass es an der Konfiguration von meinem Tomcat liegt ... tia

Im Anhang folgt der Source-Code von der JSP und die Fehlermeldung vom Tomcat.

Hoffentlich kann mir jemand helfen.

tia und schöne Grüße

Oli


Code vom JSP:
==========
Code:
<%@ page import ="java.io.*" %>
<%@ page import ="org.apache.commons.fileupload.*" %>
<%@ page import ="org.apache.commons.fileupload.servlet.*" %>
<%@ page import ="org.apache.commons.fileupload.disk.*" %>
<%@ page import ="java.util.*" %>

<html>

<head><title>Test</title></head>

<body>
	<h1> Eine Testseite</h1>

	<% 	
/**
 * Schauen was in den Variablen steht die vom Server mitgeschickt
 * wurden. Besonderheiten von einem FileUpload herausbekommen.
 **/
		if (FileUpload.isMultipartContent(request)) {
			try {
				out.println("<h3> Inhalt des Geparsten:</h3>");
				// ENCTYPE='multipart/form-data' Daten rauslesen!!!
				FileItemFactory factory = new DiskFileItemFactory();
				ServletFileUpload upl = new ServletFileUpload(factory);
// Sobald ich die folgende Zeile einfüge läuft das JSP nicht mehr!
//				java.util.List items = upl.parseRequest(request);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}				

	
		out.println("<h3>request Variable:</h3>");
		out.println("
request.getQueryString(): " + request.getQueryString() + "
");
		out.println("request.getRequestURL(): " + request.getRequestURL() + "
");

		out.println("<h3>Multipart?</h3>");
		out.println("Ist Multipart Request (File Upload)?: " + FileUpload.isMultipartContent(request) + "
");
		%>
		
		
	<h1>Hochladen einer Datei</h1>
	
	<form action=<%= request.getRequestURL()%> method="post" ENCTYPE='multipart/form-data'>
		Datei: <input type="file" size="50" name="datei" maxlength="10000" accept="text/*"/>

		<input type="submit" name="action" value="upload file" />
	</form>
	
</body>

</html>


Die Fehlermeldung vom Tomcat (wenn die Zeile nicht auskommentiert ist):
================================================

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.fileupload_jsp._jspService(org.apache.jsp.fileupload_jsp:134)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:179)
org.apache.commons.fileupload.FileUploadBase.createItem(FileUploadBase.java:500)
org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:367)
org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:116)
org.apache.jsp.fileupload_jsp._jspService(org.apache.jsp.fileupload_jsp:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.12 logs.
 

Bleiglanz

Gesperrter Benutzer
würdest du GNÄDIGERWEISE mal in Betracht ziehen, meinem obigen Link zu folgen und UNTER UMSTÄNDEN mal die Augen aufzumachen
Why is NoClassDefFoundError being thrown while parsing?
This most commonly happens when attempting to rely on a shared copy of the Commons FileUpload jar file provided by your web container. The solution is to include the FileUpload jar file as part of your own web application, instead of relying on the container.
 

nauni77

Mitglied
Hi,
ich bin Deinem Link gefolgt und habe dort auch gelesen ... aber ich dachte es so gemacht zu haben. Verstehe wohl nicht was damit gemeint ist ...

... to include the FileUpload jar file as part of your own web application, instead of relying on the container.

Fürge ich mit diesen Anweisungen das JAR nicht als Teil meiner Web-Applikation ein? Siehe:
Code:
...
<%@ page import="org.apache.commons.fileupload.*" %>
...

Ich habe das jar unter ..../myProject/WEB-INF/lib liegen. Dort würde ich auch selbst erstellte Packages hinterlegen. Wie könnte ich das "näher" an meine Web-Applikation bringen? Soll ich diese Zeilen in einer Bean ausführen - aber diese werden doch dann auf jeden Fall in dem Container ausgeführt?!!?? Oder???

Sorry, ich kenne mich noch nicht so gut mit dem Tomcat aus und stolpere noch über die eine oder andere Hürde. Wäre wirklich prima, wenn Du mir noch mal kurz auf die Sprünge hilfst.

Vielen Dank schon mal, Oli
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben