Datei Upload mit JSP

hugo1981

Erfahrenes Mitglied
Hallo,

ist bestimmt ein triviales Problem, aber ich versuche das zum ersten mal.. und kam nicht ganz drauf :(
ich arbeite mir JSP und will eine Datei (Bild, am besten beschränkt auf jpg,png,bmp,gif) auf ein server hochladen in einen Ordner /img .

Und wie kann ich nur den Dateinamen extrahieren, damit ich dieses als String in eine DB Tabelle speichere?

wie schaffe ich das?
Mein Formular bis jetzt:

Code:
<form action="register.jsp" method="post" enctype="multipart/form-data" name="Eingabe" class="eingabe">

....
....

 <label>Foto
	  <input type="file" name="img" id="img" value="Foto" >
	  </label>
</form>
register.jsp liest bis jetzt "nur" andere Felder des Formulars aus und schreibt diese über eine Java-Klasse in eine DB.

Wie müsste ich das erweitern, damit ich die Datei in einen bestimmten Ordner auf dem Server bekomme?

Vielen vielen Dank im Voraus.. :)))

lg,
hugo
 
Moin,

ich schieb das mal ins JAVA-Forum, denn Auslesen willst/musst du ja serverseitig, und da läuft nichts mit Javascript.
 
stichwort hier ist die Apache FileUpload API.

Die ist dazu da, dass man per JSP und Servlets einen upload realisieren kann. Dies kann man später dann per FileOutputStream in einer Datei auf dem Server speichern oder per Stream einfach verarbeiten ohne die Datei zwischen zu speichern.

Mfg Chimaira
 
Hi :)

Kannst Du /könnt Ihr mir das ein paar Tips zum Einstieg geben, wie ich das am besten integriere, wenn Ihr bereits Erfahrungen damit habt?

Ich habe ein Formular, wo ich gerne die Datei auf eine Ordner speichern und die anderen Felder, sowie den Dateinamen in die DB schreiben würde..

Ich wurde noch nicht wirklich schlau aus dem was ich gefunden habe. :(

Das wäre wirklich super..

Vielen Dank im Voraus :)
 
Hi Leute,

kann mir hier jemand helfen?

Code:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		InstanceManager _tmpInsMan = (InstanceManager) request.getSession().getAttribute("insMan");
		ApplicationManager _tmpAppMan = (ApplicationManager) request.getSession().getAttribute("appMan");
		
		if(request.getParameter("art").equals("application") && request.getParameter("change").equals("false")){

			if(proceedUpload(request)){
				_tmpAppMan.addApplication(getInstance(), getContainer(), getApplication()
						, getDepPass(), getDepFilePath());			
				
				response.sendRedirect("./admin/adminPage.jsp?section=application");
			}
		
		}

Das ist der Auszug aus dem DoPost. Abgeschickt werden die Daten über dieses Formular:

Code:
<form action="../AddServlet" method="post">
	<input type="hidden" name="art" value="application">
	<input type="hidden" name="change" value="false">
	<table>
                .........
		<tr>
			<td>Deployment-Plan</td>
			<td><input type="file" name="planFile" id="planID"></td>
		</tr>
                ..............
</form>

Und die Methode proceedUpload(HttpServletRequest request):

Code:
private boolean proceedUpload(HttpServletRequest request){
		try{
			ServletFileUpload servletUpload = new ServletFileUpload();
			
			FileItemIterator iter = servletUpload.getItemIterator(request);
			while (iter.hasNext()) {
			    FileItemStream item = iter.next();
			    String name = item.getFieldName();
			    byte[] buffer = new byte[8192];
			    
			    //InputStream wird geöffnet
			    InputStream stream = item.openStream();
			    if (item.isFormField()) {
			        if(name.equals("insName")){
			        	setInstance(Streams.asString(stream));
			        }else if(name.equals("conName")){
			        	setContainer(Streams.asString(stream));
			        }else if(name.equals("appName")){
			        	setApplication(Streams.asString(stream));
			        }else if(name.equals("depPass")){
			        	setDepPass(Streams.asString(stream));
			        }
			    }else{
			    	//Öffnen des Streams und hochladen der Anwendung
			    	String fileName = item.getName();
			        FileOutputStream outFile = new FileOutputStream(new File(fileName));
			        
			        int _tmp = 0;
			        
			        while((_tmp = stream.read(buffer)) > 0){
			        	outFile.write(buffer, 0 , _tmp);
			        }			      			   
			        
			        outFile.flush();
			        outFile.close();
			        setDepFilePath(fileName);
			    }
			    //InputStream wird geschlossen
			    stream.close();
			}
			return true;
		} catch (FileUploadException e) {
			e.printStackTrace();
		} catch (IOException ex){
			ex.printStackTrace();
		}
		return false;
	}

Aber irgendwie ruft er die Methode proceedUpload nicht auf ... ich weiß nicht warum ... denn ich habe dort ne Methode drin gehabt, welche in eine Datei schreibt, wenn er dort ist.

Den Text aus der DoPost hab ich in der Datei gehabt. Den aus der proceedUpload nicht :(

//Edit >> lag am Formular. Habe nicht angegeben das es Multi-Part sein soll :)

Mfg Chris
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück