# fileupload - jakarta.commons.fileupload



## nauni77 (24. Jan 2006)

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):


```
<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:

```
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.


----------



## Bleiglanz (24. Jan 2006)

Erstmal: WELCHEN FEHLER, wir können hier nicht hellsehen

ich hab eine Ahnung: verwende ein Servlet

http://jakarta.apache.org/commons/fileupload/faq.html#parse-in-action-fails

ich vermute stark, dass du schon auf den request zugegriffen hast, weiter oben in deiner JSP...


----------



## nauni77 (25. Jan 2006)

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:
==========

```
<%@ 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 (25. Jan 2006)

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 (25. Jan 2006)

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: 

```
...
<%@ 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


----------



## Bleiglanz (25. Jan 2006)

oha, nehme alles zurück

http://jakarta.apache.org/commons/fileupload/dependencies.html

mach mal den Download von

http://jakarta.apache.org/commons/io/

und leg die entsprechende jar auch in WEB-INF/lib


----------

