Как создать HTTP-ответ, отправляющий изображение в JAVA? - PullRequest
0 голосов
/ 31 октября 2011

У меня возникают некоторые проблемы при написании базового веб-сервера на JAVA.В настоящее время он отлично работает при доставке файлов HTML или CSS.Но когда дело доходит до образов, все запутано.Я предполагаю, что я делаю что-то не так при чтении файлов изображений и подготовке их к отправке.Но взгляните на код:

public void launch()
{
    while(true)
    {
        try
        {
             Socket connection = this.server_socket.accept();

             ...

             PrintWriter print_writer = new PrintWriter(connection.getOutputStream());

             String response = this.readFile(this.request_header.get("Resource"));
             print_writer.print(response);

             print_writer.flush();
             connection.close();
         }
         catch(...)
         {
             ...
         }
    }
}

private String readFile(String path)
{
    try
    {
         ...

         FileInputStream file_input_stream = new FileInputStream(path);         
         int bytes = file_input_stream.available();
         byte[] response_body = new byte[bytes];

         file_input_stream.read(response_body);
         this.response_body = new String(response_body);

         file_input_stream.close();

         this.setResponseHeader(200, file_ext);

         this.response_header = this.response_header + "\r\n\r\n" + this.response_body;
    }
    catch(...)
    {
         ...
    }

    return this.response_header;
}

Так что мой браузер получает что-то вроде:

HTTP/1.0 200 OK
Content-type: image/jpeg

[String that was read in readFile()]

Но Chrome не отображает изображение правильно, и Opera не покажет все это!Раньше я читал файл с помощью BufferedReader, но нашел, что кто-то говорит, что BufferedReader не может правильно обрабатывать двоичные данные, поэтому я попытался с FileInputStream, но проблема осталась прежней):

Спасибо за любые подсказки ипомощь заранее (:

1 Ответ

2 голосов
/ 31 октября 2011

Вы должны использовать потоки с обеих сторон: входной поток и выходной поток.Читатели и авторы предполагают, что контент является Unicode, и вносят коррективы в поток байтовPrintWriter - это, конечно, писатель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...