Anzeige Bild aus byte-array im browser
Habe ich eine einfache TCP-serversocket, dass eine byte-array. Das kommt bei der Eingabe einer website auf diesem server, die enthält ein img-src link zu einem gif-Bild, der Anfragen sieht wie folgt aus:
GET /myHome.htm HTTP/1.1
GET /house.gif HTTP/1.1
Nun das byte-array wird wie folgt vorgenommen:
byte[] fileByte = Files.readAllBytes(filePath);
Drucken Sie die website, die enthält das Bild, das ich dies tun:
out.writeBytes(new String(fileByte));
out:
DataOutputStream out= new DataOutputStream(socketClient.getOutputStream());
Nun um die Bild-Anzeige ich glaube, ich habe Sie etwas anderes zu verwenden, dann
out.writeBytes()
aber ich weiß nicht für sicher. Jemand weiß, wie um das Bild anzuzeigen? Jetzt das Bild einfach nicht erscheint.
new String(fileByte)
-Schauder - nicht ständig tun. Ein array von bytes ist nicht string.- aber es funktioniert für die html ^^
- ein string text. html ist text. ein Bild ist nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, stellen Sie sicher, dass Ihre GIF-Datei ist nicht beschädigt. (Passiert mir auch).
Wenn das der Fall ist, versuchen, diesen code für das versenden der GIF-Datei:
Und dann versuchen, navigieren Sie zu "house.gif" direkt anstelle von "myHome.htm". Lasst mich in den Kommentaren wissen, was diese tut.
Vorherigen Antwort versucht:
Ich glaube, ich kann deine Frage missverstanden. Lassen Sie mich versuchen, mit einer anderen Antwort:
Sind Sie nicht sicher, wie Sie Sie herausfinden, auf dem server, wenn die Rückkehr der HTML-Datei myHome.htm und Wann zurück house.gif?
Ich denke, für diese müssen Sie einfach analysieren die angeforderte URL. Prüfen Sie einfach, ob es enthält "house.gif" oder auch nicht. Dann, abhängig von dieser, Sie kehren Sie entweder die HTML-Datei, wie Sie oben beschrieben sind, oder Sie senden die .gif-Datei, so dass Sie sicher, dass Sie
senden der binären Daten und, dass Sie einen Antwort header
In beiden Fällen (für die HTML-Datei und die GIF-Datei), jedoch sollten Sie voran, die Daten, die Sie senden mit den richtigen HTTP-response-Header. Nehmen Sie nicht die Seite-Titel der falsche Weg, aber diese Seite könnte helfen: http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/
Und um sicherzustellen, dass: Dein server empfangen werden ZWEI unabhängige Anforderungen. Die erste Frage für die HTML-Datei, die zweite wird die Frage nach der GIF-Datei. So senden Sie entweder das eine oder das andere. So, es gibt keine "besonderen Weg", um senden Sie die GIF-statt der HTML-Datei. Verwenden Sie den gleichen clientSocket. Aber es ist eine andere Verbindung.
Vorherigen Antwort(en):
Ich denke, es fehlt der mime-Typ des zurückgegebenen Daten. Versuchen Sie, die folgenden HTTP-header auf Eure Antworten:
Eigentlich... schicken Sie eine korrekte HTTP-Antwort an alle (einschließlich Kopf, speziell "Content-Length")? Wenn nicht, Schießen mir einen Kommentar und ich poste den code, den Sie dafür brauchen.
Wenn aus irgendeinem Grund können Sie nicht die content-type-header, damit der browser weiß, dass Sie senden Sie ein Bild, Sie könnten in der Lage sein, zu laden, der binäre Daten auf dem client mit einem XMLHttpRequest in einem JavaScript-Funktion eher als die Angabe, wie die Quell-Url ein img-tag. Dann können Sie JavaScript verwenden, um die binären Daten zu codieren in ein dataURI (http://en.wikipedia.org/wiki/Data_URI_scheme) mit dem richtigen mime-Typ und festgelegt, dass als Quelle für das Bild.
Tatsächlich habe ich gerade bemerkt etwas in Ihrem code:
könnte interpretieren die fileBytes als unicode-Zeichen statt mit binären. Dann, wenn Sie dieses schreiben an den Verfasser, er könnte es vermasseln, da wahrscheinlich nicht alle Daten, die in dem Bild gültig sind unicode. Ersetzen Sie die Zeile mit dieser:
Vielleicht ist das alles, was Sie tun müssen, um es zu beheben???
Content-Type
vom server zurückgegeben wird, nicht der 'Accept' - Typen, die vom client gesendet. Sorry für die nicht klar ist.