Bild-Datei von Servlet an Browser senden

Status
Nicht offen für weitere Antworten.
Hallo Leute,
ich hab mal wieder ne blöde Frage...

Ich will dass mein Servlet auf Anfrage eines Browsers eine Bild-Datei sendet. Also wenn der Browser z.B. http://localhost:8080/MeinServlet/Bild.jpg aufruft, dass diese dann angezeigt wird.

Ich habe es zunächst mit folgendem Code versucht:
Code:
protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException
{  
    res.setContentType("image/jpeg");
    File f = new File("Bild.JPG");
    FileReader fr = new FileReader(f); 	
    OutputStreamWriter o = new OutputStreamWriter(res.getOutputStream());
    int groesse = 200;
    char[] puffer = new char[groesse];
    int n;
    n=fr.read(puffer);
    while(!(n<puffer.length))
    {
        o.write(puffer,0,groesse);
        n=fr.read(puffer);
    }
    o.write(puffer,0,n);
    o.flush();
    res.getOutputStream().close();
}

Beim Browser kommt auch sowas wie ein Bild an. Also ein Bild, welches von der Höhe und der Breite tatsächlich mit "Bild.JPG" übereinstimmt, nur sieht der Inhalt ganz anders aus, man kann nicht mal teilweise erkennen dass es sich um das selbe Bild wie "Bild.JPG" handeln soll.


Ich habe im Internet folgenden funktionierenden Code gefunden:

Code:
protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException
{  
    res.setContentType("image/jpeg");
    File f = new File("Bild.JPG");
    FileInputStream is = new FileInputStream(f);    
    ServletOutputStream os = res.getOutputStream();
    int c;
    while((c=is.read()) != -1)
    {
        os.write(c);
    }	  
    is.close();
    os.close();
    return;
}



Wieso funktioniert denn mein eigener Code (der obere) nicht?

mfg
 

ARadauer

Top Contributor
mhn seltsam kann jetzt auf den ersten blick keinenen fehler finden... char[] müsste reichen. versuch mal testweuse ein int[] oder byte[]
 
Hab ich eben versucht, ich bin mei meinem Ansatz von umgestiegen von

Code:
.
...
FileReader fr = new FileReader(f);
char[] puffer = new char[groesse]
...

auf

Code:
...
FileInputStream fr = new FileInputStream(f);
byte[] puffer = new byte[groesse]
...

Es hat sich nichts geändert.
Für ein int[] gibts leider keine passende read()-Methode.




Noch was seltsames was ich dabei herausgefunden habe: Meine Datei ist 1961 Bytes groß (sagt Windows). Bei meinen Methoden mit char[] bzw. byte[] werden insgesamt 1964 Bytes gelsesen. Ist zwar auch schon merkwürdig, aber bei der zweiten Methode, bei der einzelne ints gelesen werden, finden insgesamt 3795 Aufrufe dieser read()-Methode statt...

Man könnte doch annehmen dass weniger Aufrufe stattfinden würden, wenn man einen größeren Datentyp einliest...



Sorry für die dummen Fragen, aber ich beschäftige mich gern mit dem low-level Bereich (auch wenns Java ist ;) ).
Vielleicht kennt ja jemand ein Buch wo so low-level Zeugs übner Java drin steht (aber bitte nur low-level Zeugs - Programmieren kann ich schon ;) )
 

Geeeee

Bekanntes Mitglied
Also ich habe mir mal das "Problemchen" angeschaut mit dem Ergebnis, dass irgendwo auf dem Weg des Kopierens das Charset / Encoding ne Macke bekommen muss. Wenn du dir den HEX-Code anschaust, dann stellt man fest, dass er teilweise die ANSII-Zeichen auf ASCII runterbricht (und dadurch natürlich totaler Murks in der Datei steht).
Hatte gerade auch das Problem beim programmatischen Kopieren einer Bilddatei. Endlich mal rausgefunden, woran es liegen könnte.
 

Geeeee

Bekanntes Mitglied
Das ist leider der Punkt, an dem ich dann auch die "richtige" Lösung verwendet habe:
Der FileReader sagt mir bei getEncoding() Cp1252
Nutze ich dieses im OutputStreamWriter, sehen die Daten zwar "anders" aus, aber zusammenfasst: Müll :D
Nun hat mich aber die Neugier gepackt und ich will wissen, was da falsch läuft :bahnhof:

[Edit] "richtige" Lösung => Direkt von FileInputStream auf FileOutputStream
 
Zuletzt bearbeitet:
Aha, ok. Die Sache mit so nem Encoding Zeugs und UniCode hab ich schon befürchtet.

Code:
  protected void doGet(HttpServletRequest req,HttpServletResponse res)throws ServletException, IOException
  { 
     	res.setContentType("image/jpeg");
    	File f = new File("Yippie.JPG");
    	FileInputStream fi = new FileInputStream(f); 	
    	OutputStream out = res.getOutputStream();
    	
    	int groesse = 200;
     	byte[] puffer = new byte[groesse];
     	int n;
     	n=fi.read(puffer);
    	while(!(n<puffer.length))
    	{
    		out.write(puffer,0,groesse);
    		out.flush();
    		n=fi.read(puffer);
    	}
		
        out.write(puffer,0,n);
	out.flush();
    	res.getOutputStream().close();
 }


So geht's jedenfalls! Danke Leute.

Ich muss mich schämen dass ich darauf nicht selber gekommen bin! Ich war fest davon überzeugt, diese Variante mehrmals versucht zu haben... und in der API hab ich auch gelsesen. Wahrscheinlich hab ich da den Wald vor lauter Bäumen nicht mehr gesehen:

FileReader, InputStreamReader, BufferedReader, OutputStream, OutputStreamWriter, BufferedWriter, BufferedInputStream, BufferedOutputStream.

Hier mit char[], dort mit byte[]...

Da wirst ja noch verrückt!


Danke nochmals!
 
Zuletzt bearbeitet:

uwe75-1

Mitglied
Hallo,

Sorry, wenn ich diesen alten Thread nochmal öffne, aber das hat genau mit meinem Problem zu tun. Ich benutze auch das o.g. Servlet, um Bilder in einem NEUEN Fenster darzustellen. Kann mir jemand verrraten, wie ich HTML Header Information vom Servlet an Client senden lassen kann. Ich will den Titel des Neuen Fensters individuell festlegen. Momentan wird als Titel immer die komplette http-Adresszeile zum Servlet angezeigt.

Vielen Dank für Eure Hilfe

Uwe
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
M bild von einer url erzeugen Netzwerkprogrammierung 7
A HTTP Bild downloaden Netzwerkprogrammierung 3
J HTTP Bild an Client schicken mit com.sun.net.httpserver Netzwerkprogrammierung 5
G Bild URL über ImageIO.read Netzwerkprogrammierung 8
G Bild aus PHP-seite speichern Netzwerkprogrammierung 7
A Webserver - Bild senden Netzwerkprogrammierung 2
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
J Datei Download vom Server Netzwerkprogrammierung 8
H Datei mit Anhang via http "hochladen" Netzwerkprogrammierung 16
E JCIFS - Smb - Datei kann nur von einem Benutzer bearbeitet werden Netzwerkprogrammierung 1
Aruetiise Socket Datei Endung Netzwerkprogrammierung 6
A FTP wie kann ich von java auf datei in fpt://192.168.178.1 lesen/schreiben? Netzwerkprogrammierung 3
K HTTP Formulare füllen und Datei downloaden Netzwerkprogrammierung 23
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
A Datei erzeugen und auf der Weboberfläche downloaden (Tomcat) Netzwerkprogrammierung 4
Sogomn HTTP Datei herunterladen Netzwerkprogrammierung 13
C Inhalt einer .JPG Datei in einen OutputStream schreiben? Netzwerkprogrammierung 10
F FTP FTPClient Datei lässt sich nicht öffnen Netzwerkprogrammierung 4
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
F FTP Einzelne Datei von FTP-Server überprüfen Netzwerkprogrammierung 0
L FTP Lesen einer Datei vom Server - Aufgehangen Netzwerkprogrammierung 0
M jsf-seite beim hinzufügen einer csv-datei in einen ordner aktualiseren Netzwerkprogrammierung 0
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
S Datei(XML) per RMI an Server schicken Netzwerkprogrammierung 0
V Datei Download Fenster Netzwerkprogrammierung 9
S Datei schreiben über Applet Netzwerkprogrammierung 8
C Socket Datei Übertragung Netzwerkprogrammierung 5
D Datei hochladen zu PHP Server Netzwerkprogrammierung 8
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
K HTTP Eigener Http Response für Datei-Download Netzwerkprogrammierung 4
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
H Datei in DropBox schreiben Netzwerkprogrammierung 23
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
V Datei auf Server Schreiben Netzwerkprogrammierung 18
N Einen Server als ausführbare Datei exportieren Netzwerkprogrammierung 15
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
C Datei auf server speichern Netzwerkprogrammierung 16
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9
W Datei automatisiert kopieren! Netzwerkprogrammierung 5
P Wachsende Datei per FTP lesen Netzwerkprogrammierung 2
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
S Servlet - Datei kann nicht gelöscht werden Netzwerkprogrammierung 12
G Txt datei von Website downloaden Netzwerkprogrammierung 8
R HTTP Apache HTTP Client: Request mit angehängter Datei Netzwerkprogrammierung 2
I HTTP Datei Uploaden mit http und Sprache anpassen Netzwerkprogrammierung 7
1 Datei senden/empfangen funzt nicht... Netzwerkprogrammierung 5
S ActiveMQ, JMS und Datei übertragen Netzwerkprogrammierung 25
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
U Web Datei downloaden und bei Änderungen wieder zurückspielen Netzwerkprogrammierung 5
M Class-Datei aus Eclipse mit Xampp Netzwerkprogrammierung 4
A HTTP Download einer Datei mit "Statistiken" Netzwerkprogrammierung 2
B Zugriff auf eine Text- und XML-Datei Netzwerkprogrammierung 4
Dit_ FTP, Datei Hochladen Netzwerkprogrammierung 4
Ollek Download einer Datei durch SFTP mit Java Netzwerkprogrammierung 12
J Datei übertragen ja String + datei übertragen nein Netzwerkprogrammierung 5
P Name der Download-Datei ermitteln Netzwerkprogrammierung 8
N Socket TCP Datei Transfer Netzwerkprogrammierung 2
L Java über php datei lesen? Netzwerkprogrammierung 18
P Socket Datei von Client zum Server übertragen --> Weiterleitung an Clients Netzwerkprogrammierung 16
Akrillo Datei per Netzwerk senden Netzwerkprogrammierung 10
P HTTP Problem beim Download von einer Datei Netzwerkprogrammierung 4
L Größe einer Datei auslesen die im Netz liegt Netzwerkprogrammierung 4
weeego Ping über CMD, Umweg über Batch Datei sparen. Netzwerkprogrammierung 17
R Versenden einer MIME-Datei per E-Mail [solved] Netzwerkprogrammierung 5
O Mehrere Datei per DataInput/OutputStream über Socket Netzwerkprogrammierung 12
S StringArray in .txt Datei --> langsam wegen Client/Server!? Netzwerkprogrammierung 16
U Datei via UDP Netzwerkprogrammierung 8
C Dateigröße einer Datei im Internet ermitteln Netzwerkprogrammierung 2
S Error 404 obwohl die Datei existiert Netzwerkprogrammierung 9
T Datei Herunterladen und ausführen Netzwerkprogrammierung 5
S Mittels Java XML abfragen und nicht die Ausgabe-HTML-Datei Netzwerkprogrammierung 5
C PCAP Datei auslesen Netzwerkprogrammierung 8
F Applet Datei Zugriff Netzwerkprogrammierung 13
G Datei performant im Netzwerk verschieben Netzwerkprogrammierung 4
M [Commons NET] Prüfen, ob auf FTP Datei vorhanden ist Netzwerkprogrammierung 2
Rontu Problem beim Übertragen einer Datei Netzwerkprogrammierung 9
E Größe der Datei vor Download ermitteln Netzwerkprogrammierung 3
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
E Applet zum Datei-Upload Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
J Gibts die Datei? Netzwerkprogrammierung 3
K Datei-Upload per FTP Netzwerkprogrammierung 2
G Fehlermeldung beim Erzeugen der WSDL Datei unter Axis Netzwerkprogrammierung 2
S über rmi datei übertragen? Netzwerkprogrammierung 2
J Zeilenweises auslesen aus einer Datei über Server Netzwerkprogrammierung 6
G Datei über ObjectInputStream versenden Netzwerkprogrammierung 8
G.I.Joe Datei per POST übertragen Netzwerkprogrammierung 2
B Umfangreiche Batch Datei (Rmiregistry prüfung + Prog. start) Netzwerkprogrammierung 4
V Einen Eintrag aus einer Zip Datei von einem Server laden Netzwerkprogrammierung 2
M Datei auf einem Server ausführen Netzwerkprogrammierung 4
N Dateigröße einer Datei auf einem HTTP-/Web-Server. Netzwerkprogrammierung 9
W fehlerhafte Datei nach Dateitransfer per ServletOutputStream Netzwerkprogrammierung 2
F Datei senden und empfangen Netzwerkprogrammierung 4
B Via Java Datei zu PHP-Script auf Apache hochladen Netzwerkprogrammierung 4
B knacken bei download von mp3 datei Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben