# <input type="file"> Problem



## DayXtry (11. Jan 2007)

Hi,
hab mal wieder ein Problem. Bei neuen Browsern steht ja nach dem Absenden eines Formulars bei <input type="file"> im value nur der Dateiname drin, aber nicht der Pfad. Hab ziehmlich viel gesucht, häng aber immer noch an dem Problem fest.

Also ich will nicht direkt eine Datei uploaden, ich brauch nur den Pfad zu der Datei.

Hab bis jetzt folgenden Code:

```
if(FileUpload.isMultiPartContent(request)) {
            try {
                out.println("<h3>Inhalt des geparsten:</h3>");
                
                //ENCTYPE='multipart/form-data' Daten auslesen
                FileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upl = new ServletFileUpload(factory);
                
                java.util.List items = upl.parseRequest(request);
            } catch (Exception e) {
                e.printStackTrace();
            }
}
```

mein Formular:

```
<form name="form1" action="test.jsp" method="post">
        <input type="file" name="bild">
        <input type="submit">
    </form>
```

Das erste Problem ist schon mal, dass er mir bei 
	
	
	
	





```
FileUpload.isMultiPartContent(request)
```
 sagt, dass er die Methode isMultiPartContent() nicht kennt. Aber hab alle libs eingebunden (commons-io-1.2-src-ide.zip, commons-io-1.2.jar, commons-fileupload-1.1.1.jar).
In der Variable factory werden dann alle Daten des Formulars gespeichert. Hab ich das richtig verstanden? Wenn ja, wie kann ich dann auf den Wert von dem <input type="file" name="bild"> zugreifen?

Würde mich wirklich sehr über Antworten freuen.

Mit freundlichen Grüßen
DayXtry


----------



## MatthiasKnorr (11. Jan 2007)

Glaub nicht, dass die Pfadinformationen mit übertragen werden, da diese total uninteressant sind. Auf dem Server wird nämlich nur die Datei und nicht der Pfad gespeichert. Ich glaub aber Opera schickt den Pfad mit.

Du kannst aber über Javascript den absoluten Pfad der Datei vor dem Submit abfangen und als Parameter übertragen. 


```
<html>
	<form name="myform" method="post" action="test.html" onsubmit="javascript:myform.path.value=myform.file.value;">
		<input name="path" type="hidden">

		<input name="file" type="file">

		<input type="submit">
	</form>
</html>
```

Grüße,
Matthias


----------



## DayXtry (11. Jan 2007)

Klappt wunderbar,...BIG THX!!!!

Gruß DayXtry


----------



## SebiB90 (11. Jan 2007)

@MatthiasKnorr
wie du selbst gesagt hast, wird die datei übertragen. wieso aber holst du dir dann über umwegen den pfad?
das script läuft solange client und server der gleiche pc ist, aber dann auch nicht mehr.

@DayXtry
versuch nochmal deine alte version, aber du musst im html code auch angegeben das es ein multipartcontent gibt.
das machst du indem du in den form tag enctype="multipart/form-data" rein schreibst. also so:

```
<form name="form1" action="test.jsp" method="post" enctype="multipart/form-data" > 
        <input type="file" name="bild"> 
        <input type="submit"> 
    </form>
```


----------



## DayXtry (12. Jan 2007)

@SebiB90
Hi,
das mit  enctype="multipart/form-data" hab ich oben ausversehen weggelassen. Also wenns mit im form steht, kennt er die Methode isMultiPartContent() immer noch nicht. Aber danke schon mal für deine Hilfe!

Gruß DayXtry


----------



## DayXtry (15. Jan 2007)

kann mir eventuell doch jemand weiterhelfen?

Dank schonmal
DayXtry


----------



## DayXtry (15. Jan 2007)

Sry erst mal für den drei fach post,....

Also ich habs jetzt so weit:


```
<form name="form1" action="test.jsp" method="post" enctype="multipart/form-data">
        <input type="file" name="bild">
        <input type="submit">
    </form>
    
<%
                    try {
                        out.println("<h3>Inhalt des geparsten:</h3>");                        
                        
                        DiskFileUpload upload = new DiskFileUpload();
                        
                        List items = upload.parseRequest(request);
                        
                        Iterator itr = items.iterator();
                        
                        while(itr.hasNext()) {
                            FileItem item = (FileItem) itr.next();
                            
                            DefaultFileItem dfi = (DefaultFileItem) item;
                            File storeLocation = dfi.getStoreLocation();
                            
                            if(item.isFormField()) {
                                String fieldName = item.getFieldName();
                            }
                            else {
                                File fullFile = new File(item.getName());
                                File savedFile = new File(getServletContext().getRealPath("/bilder"),
                                        fullFile.getName());
                                item.write(savedFile);
                            }
                        }
                        
                        
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
%>
```

Nur,...also der lädt das mit dem Skript auf den Server hoch,...was ich ja eig. nicht will,...ich will nur den lokalen Namen + Pfad!!! der hochzuladenden Datei...aber mit dem Code kann i mir nur den Pfad + Namen der Datei auslesen lassen, die nachher aufm Server liegt. Ok i kann mir mit dem Code au no die .temp anzeigen lassen, aber das bringt mir alles reichlich wenig.

Gruß DayXtry


----------

