Я пишу HTTP-сервер для забавы с нуля (пытаясь узнать HTTP больше indepth) и получил сервер для отправки клиенту HTTP-ответа с HTML без большой вопрос.Отправка изображений (или двоичных данных) поверх сокетов в Java
Проблема возникает, когда я пытаюсь отправить двоичные данные, такие как изображение JPEG по проводу. Возможно, браузер не интерпретирует его правильно. Я установил для MIME-типа свой ответ на image/jpeg
, и вместе с правильным Content-Length
я все еще не могу правильно передать данные.
Немного тупик в этом вопросе, и мне было интересно, может быть, мое понимание или подход к чтению двоичных данных на Java неверно?
Общий подход, который я делаю, это чтение файла с диска в FileInputStream
, а затем чтение данных в буфер с 1024 байтами. Когда я читаю в буфер, я пишу буферизованные данные в DataOutputStream
, у которого есть соединение сокета клиента как OutputStream
. Я сбрасываю и закрываю данные после использования.
Часть, в которой я генерируя мое тело для моего ответа HTTP здесь:
FileInputStream fis = new FileInputStream("www/server.jpg");
byte[] buffer = new byte[1024];
DataOutputStream dos = new DataOutputStream(this.clientSocket.getOutputStream());
int read;
while((read=fis.read(buffer)) >= 0) {
dos.write(buffer, 0, read);
}
dos.flush();
fis.close();
dos.close();
Я жёстко несколько вещей, но я думаю, что это вообще получает мой вопрос в поперечнике. Поэтому, когда я сделать запрос HTTP, показанный ниже, я получаю следующий ответ:
И в FireFox образ пытается вынести, но я получаю сообщение:
У кого-нибудь есть идеи?
Спасибо!
Загрузить файл по URL-адресу с помощью wget/curl и выполнить двоичное сравнение с исходным файлом – rkosegi
Ничего себе, это было удивительно проницательно и полезно haha. Проблема заключалась в том, что у моего тела ответа был добавлен новый символ линии, вставленный перед моим телом, из-за которого браузер неправильно интерпретировал данные. После удаления этой страницы моя страница отображается правильно! – urbanspr1nter