BufferedOutputStream - Firefox 2.0.0.11 - FileNotFoundExc.

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
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)
at java.io.FileOutputStream.<init>(Unknown Source)
at servlets.UploadServlet.processRequest(UploadServlet.java:76)
at servlets.UploadServlet.doPost(UploadServlet.java:268)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
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:174)
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:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
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)

Benutze diese Klasse, um Bilder hochzuladen. Hier die Zeile die Probleme macht:
Code:
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.
 
G

Guest

Gast
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:

Code:
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 :###
 
G

Guest

Gast
Zu früh geschossen. Es liegt wahrscheinlich an der
Code:
context.setAttribute( "...", ...);
Methode(Hatte hiermit eine Ladestandsanzeige versucht zu realisieren). Sofern ich diese entferne scheint der Fehler nicht mehr aufzutauchen.
 

Squall83

Mitglied
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?
 
G

Guest

Gast
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:
Code:
byte buf[] = new byte[4096];

Code:
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();
 
G

Guest

Gast
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:

Code:
<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
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben