まず、GIF ファイルが破損していないことを確認します。(私も以前はそうでした)。
その場合は、GIF ファイルを送信するために次のコードを試してください。
byte[] fileByte = Files.readAllBytes(filePath);
writer.writeBytes("HTTP/1.1 200 OK\r\n");
writer.writeBytes("Content-Type: image/gif\r\n");
writer.writeBytes("Content-Length: "+fileByte.length+"\r\n");
writer.writeBytes("\r\n");
writer.write(fileByte, 0, fileByte.length);
そして、「myHome.htm」ではなく「house.gif」に直接移動してみてください。これが何をするのかコメントで教えてください。
以前の回答試行:
私はあなたの質問を誤解したかもしれないと思います。別の答えを試してみましょう:
HTML ファイル myHome.htm を返すタイミングと house.gif を返すタイミングをサーバーで判断する方法がわかりませんか?
このためには、要求された URL を単純に解析する必要があると思います。「house.gif」が含まれているかどうかを確認してください。次に、これに応じて、上記のように HTML ファイルを返すか、.gif ファイルを送信します。
writer.write(fileByte, 0, fileByte.length);
バイナリデータを送信し、返信ヘッダーを設定する
Content-Type: image/gif
ただし、どちらの場合も (HTML ファイルと GIF ファイルの場合)、送信するデータの先頭に正しい HTTP 応答ヘッダーを追加する必要があります。ページタイトルを間違った方法で解釈しないでください。ただし、次のサイトが役立つ場合があります: http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/
念のため: サーバーは 2 つの独立したリクエストを受信します。1 つ目は HTML ファイルを要求し、2 つ目は GIF ファイルを要求します。したがって、どちらか一方を送信します。したがって、HTML ファイルの代わりに GIF を送信する「特別な方法」はありません。同じ clientSocket を使用します。しかし、それは別の接続です。
以前の回答:
返されたデータの MIME タイプが欠落している可能性があると思います。次の HTTP ヘッダーを返信に追加してみてください。
Content-Type: image/gif
実際には...正しいHTTP応答を送信していますか(ヘッダー、特にContent-Lengthを含む)? そうでない場合は、コメントを送信してください。これに必要なコードを投稿します。
何らかの理由でコンテンツ タイプ ヘッダーを設定して、画像を送信していることをブラウザに知らせることができない場合は、指定するのではなく XMLHttpRequest を使用して JavaScript 関数にバイナリ データをクライアントにロードできる場合があります。 img タグのソース URL として。次に、JavaScript を使用して、正しい MIME タイプでバイナリ データを dataURI ( http://en.wikipedia.org/wiki/Data_URI_scheme ) にエンコードし、それを画像のソースとして設定します。
実際、私はあなたのコードで何かに気づきました:
new String(fileByte)
fileBytes をバイナリではなくユニコード文字として解釈する可能性があります。次に、これをライターに書き込むと、イメージ内のすべてのデータが有効な Unicode であるとは限らないため、失敗する可能性があります。行を次のように置き換えてみてください。
writer.write(fileByte, 0, fileByte.length);
多分これはあなたがそれを修正するためにあなたがする必要があるすべてです???