# File Upload/ ClassNotFoundException



## 5474n (6. Mrz 2012)

Hallo,

ich möchte ein File in einem Servlet uploaden,
dazu habe ich mir den Common FileUpload FileUpload - Home 
heruntergeladen, in Eclipse eingebunden und dem Tomcat bekannt gemacht.

mit:

```
out.println(
			"<form action=http://localhost:8080/CDVerwaltung/vu enctype=multipart/form-data method=POST>"+
			"<input type=file name=excel>"+
			"<input type=submit value=Upload>");
```

wähle ich eine Datei aus.
zum Verarbeiten nutze ich dann:

```
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class VerarbeiteUpload
 */
public class VerarbeiteUpload extends HttpServlet {
       

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		try {

			// Check that we have a file upload request
			boolean isMultipart = ServletFileUpload.isMultipartContent(request);

			if (isMultipart) {

				FileItemFactory fif = new DiskFileItemFactory();

				// Create a new file upload handler
				ServletFileUpload upload = new ServletFileUpload(fif);

				// Parse the request
				List <FileItem> items = upload.parseRequest(request);
				for(Object element : items)
				{
					out.println(element);
				}
			}
		}
			catch(Exception e){
				e.printStackTrace();
			}
		
		
	}

}
```
Müsste doch auch soweit passen, ich möchte bisher nur das überhaupt etwas passiert, noch ohne Weiterverarbeitung oder sonst etwas.

Bekomme dann folgenden StackTrace:

```
Mrz 06, 2012 3:13:50 PM org.apache.catalina.core.StandardWrapperValve invoke
Schwerwiegend: Servlet.service() for servlet VerarbeiteUpload threw exception
java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1438)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284)
	at org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	at de.fnt.ausbildung.verwaltung.servlet.oberflaeche.VerarbeiteUpload.doPost(VerarbeiteUpload.java:37)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Unknown Source)
```

Muss gestehen, wirklich kapiert hab ich den FileUpload noch nicht. 
Kann mir jemand helfen, oder mir eine einfache Post-Methode mit einfacher Erklärung geben?


----------



## nillehammer (6. Mrz 2012)

Commons FileUpload benutzt seinerseits auch wieder libs. U.a. commons-io. Die gibts hier: Home
Die musst Du auch noch in das lib-Verzeichnis reintun. Kann sein, dass noch weitere fehlen...


----------



## Gast2 (6. Mrz 2012)

Bei den Apache Bibliotheken gibts immer ne Seite wo alle Abhängigkeiten aufgelistet werden. Die heißt treffenderweise "Dependencies" 
FileUpload - Project Dependencies

Es fehlt dir also nur commons-io.


----------



## irgendjemand (6. Mrz 2012)

[ot]genau das ist der grund warum ich keine apache-libs verwende ... weil man nur um etwas was man selbst in 2 oder 3 klassen schreiben könnte erstmal ne tonne voll libs braucht nur weil der call-stack einmal durch alle klassen und zurück geht ... sehr sinnvoll geplant und implementiert ... -> absoluter schwachsinn[/OT]


----------



## nillehammer (6. Mrz 2012)

[OT]
Ich finde die Apache Libs super. Vieles geht eben nicht mit 2 bis 3 Klassen. Viele Fragen und Codebeispiele in diesem Forum bestätigen das. Dass Apache die libs modularisiert, finde ich nicht schlecht geplant, sondern im Gegenteil äußerst nachvollziehbar. Wenn du mal 5 bis 6 Jahre Erfahrung mit Java haben wirst, wirst Du es vielleicht auch so sehen lieber irgendjemand.
[/OT]


----------



## 5474n (7. Mrz 2012)

EikeB hat gesagt.:


> Bei den Apache Bibliotheken gibts immer ne Seite wo alle Abhängigkeiten aufgelistet werden. Die heißt treffenderweise "Dependencies"
> FileUpload - Project Dependencies
> 
> Es fehlt dir also nur commons-io.



Hab die Bibliotheken runtergeladen und festgestellt, das ich sie schon habe. Waren wohl nicht komplett oder Fehlerhaft.
Neu runterladen und einbinden hat die Lösung des Problemes gebracht

Danke


----------



## 5474n (7. Mrz 2012)

Habe nun den FileUpload für XML und Excel Dateien hinbekommen.
Mein Problem ist nun, das ich gerne ein Bild hochladen möchte, und dieses dann auf dem Servlet anzeigen. 
Ich bin damit gerade aber total überfordert. 
Kann mir da jemand schnell eine einfache Methode posten?
Im Internet gibt es einige, doch da versteh ich gar nichts


----------



## 5474n (7. Mrz 2012)

5474n hat gesagt.:


> Habe nun den FileUpload für XML und Excel Dateien hinbekommen.
> Mein Problem ist nun, das ich gerne ein Bild hochladen möchte, und dieses dann auf dem Servlet anzeigen.
> Ich bin damit gerade aber total überfordert.
> Kann mir da jemand schnell eine einfache Methode posten?
> Im Internet gibt es einige, doch da versteh ich gar nichts



Hat sich erledigt, habe was zusammenbekommen


----------



## nillehammer (7. Mrz 2012)

> Hat sich erledigt, habe was zusammenbekommen


Hast es ja schon hinbekommen. Deswegen vielleicht nur zum Verständnis: Reader/Writer sind zum Umgang mit zeichenbasierten Daten da. Ein Bild enthält Binärdaten. Diese behandelt man mit Streams. Statt response.getWriter müsstest Du also response.getOutputStream benutzen.


----------



## irgendjemand (8. Mrz 2012)

nillehammer hat gesagt.:


> [OT]
> Ich finde die Apache Libs super. Vieles geht eben nicht mit 2 bis 3 Klassen. Viele Fragen und Codebeispiele in diesem Forum bestätigen das. Dass Apache die libs modularisiert, finde ich nicht schlecht geplant, sondern im Gegenteil äußerst nachvollziehbar. Wenn du mal 5 bis 6 Jahre Erfahrung mit Java haben wirst, wirst Du es vielleicht auch so sehen lieber irgendjemand.
> [/OT]



[OT]wie bereits an anderer stelle zu lesen habe ich mitlerweile 7 jahre JAVA erfahrung ... und brauchte noch nie auch nur eine der apache-libs ...
das einzige was ich seit beginn meiner "java-aktivitäten" als libs nutze und genutzt habe ist lediglich der MySQL-connector sowie seit ungefähr einem jahr java-mail ...
auf etwas anderes musste ich noch nie zurückgreifen und konnte immer alles was ich wollte mit der SE-api umsetzen
zu mal ich die libs auch nur in meinen "server-apps" einsetze kann ich so einfach meine apps verteilen ohne einen user mit einer tonne libs überschütten zu müssen[/OT]


----------

