# BufferedOutputStream - Firefox 2.0.0.11 - FileNotFoundExc.



## Guest (3. Jan 2008)

Folgendes Problem, Firefox ermöglicht die Verwendung der BufferedOutputStream Klasse genau einmal(nach ServerStart - Apache Tomcat/5.5.25). Dann kommt folgende Fehlermeldung:




> SCHWERWIEGEND: Servlet.service() for servlet UploadServlet threw exception
> java.io.FileNotFoundException: E:\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Projekt\tmp (Zugriff verweigert)
> at java.io.FileOutputStream.open(Native Method)
> at java.io.FileOutputStream.<init>(Unknown Source)
> ...



Benutze diese Klasse, um Bilder hochzuladen. Hier die Zeile die Probleme macht:

```
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
```

Dieser Fehler erscheint nur im Firefox Version 2.0.0.11. Alle anderen Browser(Firefox Grand Paradiso(Alpha), NetScape Navigator9.0.0.5, Opera
9.22, ie6,ie7) verursachen diesen Fehler nicht. Hier funktioniert alles einwandfrei.


----------



## Squall83 (3. Jan 2008)

Hast du den OutputStream wieder mit close geschlossen?


----------



## Guest (3. Jan 2008)

Das war es fast. Vielen Dank für die Antwort. Zwischen dem letzten out.write und dem out.close stand noch eine Zeile in der ich eine Variable bearbeitet hatte:


```
int len = 0;
while( ( len = stream.read( buf ) ) > 0 ) 
                    {   //Fortschritt berechnen
                        .....
                        out.write( buf, 0, len );
                    }
                    
                   [color=blue] beispiel = 100;[/color]
                    
                    out.close();
```

Diese Zeile hat den Fehler im Firefox scheinbar verursacht. Wenn ich Sie auskommentiere geht es auch hier einwandfrei. 
Merkwürdig, aber egal. Bei Tomcat/JSP/Servlet wundert mich langsam nichts mehr.  Vielen Dank.

Conrad :###


----------



## Guest (3. Jan 2008)

Zu früh geschossen. Es liegt wahrscheinlich an der 

```
context.setAttribute( "...", ...);
```
Methode(Hatte hiermit eine Ladestandsanzeige versucht zu realisieren). Sofern ich diese entferne scheint der Fehler nicht mehr aufzutauchen.


----------



## Squall83 (3. Jan 2008)

Verwendest du Eclipse zum Programmieren? Das Programm will nämlich immer alles, was schiefgehen kann, mit try-catch versorgt wissen.

Was ist "buf" eigentlich für eine Variable? Wird die immer dann gefüllt, wenn etwas geladen wurde?
Kann es eigentlich in deinem Programm auch passieren, dass die while-Schleife verlassen wird, weil der Buffer gerade leer ist, obwohl noch nicht alles geladen ist und das Laden halt länger dauert als das, was in deiner Schleife passiert?


----------



## Guest (19. Jan 2008)

Habe mich heute nochmal mit dem Problem auseinandergesetzt. Erstmal @Squall83 ja ich programmiere mit Eclipse. Es macht aber keinen Unterschied, ob ich den Server aus Eclipse starte oder das *.war file direkt in Tomcat hochlade und dann den Server starte. 

Es kommt immer und nur in *Firefox* die gleiche Fehlermeldung. Was mir total schleierhaft ist da ja der Client auf den Server keinen Einfluss haben sollte, dachte ich zumindest. Ich übergebe hier ja nur einen Parameter. Mehr macht der Browser ja eigentlich nicht.

Die while Schleife ließt die Datei ein und gibt mir den Ladezustand zurück.

Hier die Variale buf:

```
byte buf[] = new byte[4096];
```


```
contentLength = request.getContentLength();
		                	
		                	
		                	fileName = FilenameUtils.getName( item.getName() );
		                	
		                	
		            		
		                	this.pfadToWebContent = new String(context.getRealPath("/"));
		                	
		                	file = new File( this.pfadToWebContent+"tmp"+
		                            System.getProperty("file.separator") + fileName);
		                	
		                	//OuptputStream erzeugen
		                    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
		                    
		                    //Absoluten Pfad ausgeben - zu Testzwecken
		                    System.out.println(file.getAbsolutePath());
		                    
		                  //Datei empfangen
		                    byte buf[] = new byte[4096];
		                    long read = 0;
		                    int len = 0;
		                    double finished = 0;
		                    
		                    
		                    
		                    while( ( len = stream.read( buf ) ) > 0 ) 
		                    {   //Fortschritt berechnen
		                       
		                       
		                        	 read += len;
		                             finished = ((double)read/(double)contentLength) * 100;
		                             
		                             
		                             
		                        out.write( buf, 0, len );
		                    }
		                    
		                
		                   
		                    out.close();
```


----------



## Guest (19. Jan 2008)

So jetzt hab ichs endlich gefunden. Während ich das Formular versende möchte ich parallel eine JavaScript Funktion aufrufen. So sah das Formular aus:


```
<form name="formUpload" action="upload" target="uploadFrame" enctype="multipart/form-data" method="POST" onsubmit="checkUpload();">
			    		
 ...

</form>
```

*onsubmit="..."* veranlaßt Firefox keine Dateien mehr zu übertragen. Könnte mir denken aus Sicherheitsgründen.

Conrad


----------

