# Tomahawk FileUpload UploadedFile ist null



## Grey_M (24. Jan 2008)

Ist mir ja jetzt sehr peinlich, aber wie so oft findet man den zugrunde liegenden Fehler erst, wenn man jemand anderen Fragen will...

kann das hier mal bitte jemand löschen?  :roll: 

Muss mich jetzt erst Mal auf die Suche begeben um herauszufinden, wie ich in JSF das enctype="multipart/form-data" ersetzen kann... JSf scheint damit nicht klar zu kommen....

Weiß jemand was? :shock: 

Entschuldigt


----------



## Marsman (26. Jan 2008)

Ich hatte vor ein paar Wochen auch mit dem t:fileupload experimentiert. Es funktioniert inzwischen recht gut. Mit dem type="mutipart/form-data" hatte ich allerdings auch das Problem, dass nur noch ein einziger Button von JSF verarbeitet wurde. Da würde mich auch mal interessieren, woran das liegt bzw. Wie man eine Anzeige mit t:fileupload erstellt, die mehrere Buttons wie z.B. Speichern und Zurück enthält.

Titus


----------



## Grey_M (26. Jan 2008)

Also ich konnte das Problem inzwischen lösen. Dazu musste ich jedoch von der schönen JSF Allee zum JSP Schotter-Weg.   

Wie Marsman kann man hier auch nur einen Button einbauen. Bzw. wenn man mit dem Button erst ne Action ausführt dort eine Variable setzt und diese später abfragt, dann kann man eigentlich unendlich viele Buttons machen...

@Marsman: Ich habe mal irgendwo gelesen, dass die Implementierung von multipart-request fehlt und Java daher damit nichts anfangen kann.

Ich stelle mal mein Beispiel hier rein. Vielleicht verirrt sich ja mal jemand mit dem selben Problem hier rein.

Die JSP Seite die zu Darstellung dient.

```
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

//upload.jsp enthält die Methode zum Upload.
<%@ include file="fragments/upload.jsp"%>
<html>

	<head>
		<title>Start</title>
	</head>

	//Erst Mal etwas Text und ein paar Eingabefelder erstellen.
	<body id="documentmanagement">
		<f:view>
			<%@ include file="fragments/navigation.jsp"%>
			<center>
				<h1>Documentmanagement</h1>

                             //Dieser Formbefehl geht ja mit JSF leider nicht... Daher normales html
				<form action="documentmanagement.jsp" enctype="multipart/form-data" method="POST">

					<h:panelGrid columns="2">
						<h:outputText value="Titel"/>
							<input type="text" name="DOCTITLE"/>
						<h:outputText value="Abstract"/>
							<input type="text" name="DOCABSTRACT"/>
						 <h:outputText value="Typ"/>
							<select name="DOCTYPE" size="1">

                                                 //Eine der Methoden aus meiner upload.jsp. Befüllt nur das select.
								<%=showDocTypes()%>

						    </select>
						<h:outputText value="Erstellungsjahr"/>
							<input type="text" name="DOCYEAR"/>
						<h:outputText value="Authoren Vorname"/>
							<input type="text" name="DOCAUTHORFIRSTNAME"/>
						<h:outputText value="Authoren Nachname"/>
							<input type="text" name="DOCAUTHORLASTNAME"/>
						<h:outputText value="Sperrvermerk"/>
							<input type="checkbox" name="DOCSTATUS" value="1"/>
						<h:outputText value="Datei:"/>				
							<input type="file" name="FILE"/>
					</h:panelGrid>
					<input type="submit" value="Speichern"/>


                                      //Meine Methode mir der Logik. Das Request muss übergeben werden.
					<%=uploadFile( request )%>

				</form>					
			</center>
		</f:view>
	</body>
</html>
```

Nun die upload.jsp mit der Logik. Habe es auch nur von einer anderen Seite und für meine Verhältnisse dann angepasst.
Wir verwenden Hibernate. Ich habe eigentlich alle unnötigen befehle gelöscht. Kann aber sein, dass ich etwas übersehen habe. =)

```
<%--
  Comment to this file see:
  [url]http://www.Torsten-Horn.de/techdocs/jsp-upload.htm[/url]

  Uses Jason Pell's MultipartRequest to upload a file:
  [url]http://www.geocities.com/jasonpell/programs.html[/url]

  Uses Marco Schmidt's ImageInfo to get image file information:
  [url]http://schmidt.devlib.org/image-info[/url]
--%>

<%@ page import = "java.io.*"%>
<%@ page import = "upload.*"%>
<%@ page import = "global.*"%>
<%@ page import = "model.*"%>
<%@ page import = "util.*"%>

<%!

//Das hier sit die Methode für den upload.
String uploadFile(HttpServletRequest request) throws FileNotFoundException, IOException {   
	String sUploadDir = "C:/Dev/Files/";
	String sFilePathAndNameStore = "";
	int filenumber = documentmanager.getLastInsertedID() + 1;
    // Check for valid parameter data:
	try{
		if( !request.getMethod().equals("POST" )) 
		    return "";
	   
	    MultipartRequest parser = new ServletMultipartRequest( request, 100*1024*1024 );  // < 100 MB
	    
	    if(parser.getURLParameter("DOCTITLE").equals("") || parser.getURLParameter("DOCABSTRACT").equals("") ||
		    parser.getURLParameter("DOCYEAR").equals("") || parser.getURLParameter("DOCAUTHORFIRSTNAME").equals("") ||
		    parser.getURLParameter("DOCAUTHORLASTNAME").equals("")){
				return "Bitte geben Sie alle Angaben an.";
	    }
	    
	    if( null == parser || null == parser.getFileContents("FILE")) 
			return "Bitte wählen Sie eine Datei aus.";
	    
	    String sFileName  = parser.getFileSystemName( "FILE" );
	    // Generate valid file name. Different operating systems or 
	    // browsers may return the file name with or without path 
	    // and the path may contain '/' (Unix) or '\' (Windows):
	    if(null == sFileName || 0 >= sFileName.length()) 
			sFileName = "FILE";
	    
	    char c = sFileName.charAt(sFileName.length() - 1);
	    
	    if('/' == c || '\\' == c) 
			sFileName = sFileName.substring( 0, sFileName.length() - 1 );
	    int i;
	    if( 0 <= (i = sFileName.lastIndexOf( '/' )) )
	      sFileName = sFileName.substring( i + 1 );
	    if( 0 <= (i = sFileName.lastIndexOf( '\\' )) )
	      sFileName = sFileName.substring( i + 1 );
	
	    // Different file pathes for HTML page and for storing:
	    String sFilePathAndNameHtml = sUploadDir + filenumber + 
	    	sFileName.substring(sFileName.lastIndexOf("."));
	    sFilePathAndNameStore = sFilePathAndNameHtml;
	    // Store file:
	    BufferedInputStream  is = null;
	    BufferedOutputStream os = null;
	    long sum=0;
	    try {
	      is = new BufferedInputStream(parser.getFileContents( "FILE" ));
	      os = new BufferedOutputStream(
	           new FileOutputStream( sFilePathAndNameStore ) );
	      byte[] buff = new byte[8192];
	      int len;
	      while( 0 < (len = is.read( buff )) ) {
	        os.write( buff, 0, len );
	        sum += len;
	      }
	    } finally {
	      if( is != null )
	        is.close();
	      if( os != null ) {
	        os.flush();
	        os.close();
	      }
	    }

	} catch(Exception e){
	    e.printStackTrace();
	}
	return "Datei konnte nicht erstellt werden";
}

//Die andere Methode für das select.
String showDocTypes(){
           //Unwichtiges Zeug. Hier baue ich nur über <option> "blablabla" </option> en entsprechenden Code für das  
            //select.
         ...
    return docTypes;
}
%>
```


----------



## maki (27. Jan 2008)

Funktioniert folgender Code bei dir?


```
<t:inputFileUpload 
storage="file" 
value="#{DeineManagedBean.uploadedFile}">
</t:inputFileUpload>
```

Wir hatten keine Probleme damit.


----------



## Grey_M (29. Jan 2008)

Danke maki für die Idee. Ich werde wohl erst wieder in 1-2 dazu kommen, dein oberes Beispiel zu testen. Werde dann hier aber mal reinschreiben, ob das bei mir auch geklappt hat. =)


----------

