3

Java で単純な HTTP サーバーを作成しました。ブラウザーが画像ファイルの GET 要求を Web サーバーに送信するとき、.jpg としましょう。現在、私のブラウザは画像を正しく取得できません。

正確にどのヘッダー フィールドを設定する必要がありますか?

現在、Date、Server、Content-type、Content-Length、Connection があります。次を使用して長さを設定します。

fin = new FileInputStream(fileName);
contentLength = fin.available();

Content-Type は正しい MIME タイプに設定されているため、問題はありません。

次を使用してファイルデータを書き込みます。

public void sendFile (FileInputStream fin, DataOutputStream out) 
{
    byte[] buffer = new byte[1024];
    int bytesRead;
    int strCnt = 0;
    try
    {
        int cnt = 0;
        while ((bytesRead = fin.read(buffer)) != -1)
        {
             out.write(buffer, 0, bytesRead);
        }
        fin.close();
    }
    catch (IOException ex)
    {

    }
}

これは、私の Chrome ブラウザが受け取るものです

クロームゲット

コンテンツ全体の長さをダウンロードしていないようです。

画像ファイルの実際のサイズは 2.73KB です。

欠落しているヘッダー フィールドがない場合、何が問題を引き起こしている可能性がありますか?

4

1 に答える 1

3

すべてのデータを送信していないようです。out.flush(); を追加してみてください。out.close(); fin.close() の前:

out.flush();
out.close();
fin.close();

DataOutputStream を BufferedOutputStream にラップすることもお勧めします。私の実践から、hd/networkに書き込むときはDataOutputStreamと比較してはるかに高速に動作します。

于 2012-05-17T06:04:35.203 に答える