ソケットを使用して自分のHTTPサーバーを実装しています。私のjavaプロジェクトフォルダには、ダウンロードできるすべてのファイル(test.html、test.jpg)が保存されているフォルダ/ rootがあります。そのため、ユーザがlocalhost:8080/test.htmlファイルを読み取り、バイトをクライアントのブラウザに送信して、正しいヘッダーを設定します。 .html拡張子ですべてうまく動作しますが、画像に問題があります...ブラウザは、ファイルを正しく表示できないと言います。 は、ここで私は、ファイルからバイトを読み取るために使用するクラスです:Java HTTPサーバー実装がイメージを正しく送信できない
public class FileRequestHandler {
public FileRequestHandler(){
}
/*
* Method which reads a text-file and turns it into a string
*/
public String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
}
readFileの実行後の()私は、文字列を取得します(私は、応答それを呼び出します)。
は今、私はヘッダーを設定し、それをクライアントに送信します。
out.println("HTTP/1.1 200 OK");
out.println("Content-Type: image/jpeg");
out.println("Content-Length: " + response.length());
out.println();
out.println(response);
out.flush();
アウトはPrintWriterオブジェクトです。 すでに述べたように、このメソッドはhtmlファイルで動作し、すべてが表示されます。私は間違って何をしていますか?たぶんrawバイトのエンコーディングが正しくないか、ヘッダーが正しく設定されていませんか? ありがとうございました!
ですから、テキストファイルを処理するために同じ方法を使用していますバイナリファイル(画像)? –
'println()'は使わないでください。 HTTPの行終端文字は、 'println()'が与えるものではなく、 '\ r \ n'として定義されています。 – EJP