Отправка файлов через Java-сервер byte [] - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь отправить файлы (html, css и изображения) через сокет Java-сервера.Я смог отправить HTML и CSS, за исключением изображений ..

ServerSocket ssocket = new ServerSocket(8888);
Socket socket = ssocket.accept();
File fp = new File(file);
byte[] arrByte = new byte[4096];            
FileInputStream fis = new FileInputStream(fp);
OutputStream os = socket.getOutputStream();

int count;
while((count = fis.read(arrByte)) > 0 ) {
    os.write(arrByte, 0, count);                
}

Мой клиент (получатель) является веб-сервером.Ниже приведен заголовок моего ответа:

        header = "HTTP/1.1 200 OK \n" + 
                "Connection: close \n" + 
                "Date: " + new Date().toString() + " \n" +
                "Content-Type: image/jpg \n" + 
                "Content-Length: " + fp.length() + " \n" + 
                "\r\n";

Я не могу найти, какой части мне не хватает ... Как мне загрузить изображения на сервер?

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Мне кажется, что вы не закрываете потоки, поэтому не все байты обязательно записываются клиенту.Используйте конструкцию try-with-resources, чтобы убедиться, что OutputStream закрывается.Если у вас Java 7 или выше, вы можете использовать Files.copy для копирования потока.

 Path path = Paths.get(file);
 try (OutputStream os = socket.getOutputStream()) {
     Files.copy(path, os);
 )
0 голосов
/ 20 мая 2018

Если вы получаете HTTP-запросы, вы должны отправлять HTTP-ответы, а не только содержимое файла изображения.Вы должны отправить соответствующие заголовки HTTP и , а затем содержимое.

NB Терминатор строки в HTTP указывается как \r\n, а не \n, и, что еще хуже, выиспользуют смесь обоих.

0 голосов
/ 20 мая 2018

Попробуйте с помощью ImageIO API.

  • Чтение байтов изображения через ImageIO
  • Использование ImageIO для преобразования и записи его в прерывистый ByteArrayOutputStream
  • Использование ImageIO для записи из прерывистого ByteArrayOutputStream в сокет

    InputStream in = new FileInputStream(new File(file));
    BufferedImage imageBytes = ImageIO.read(in);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    OutputStream os = socket.getOutputStream();
    ImageIO.write(imageBytes, "png", baos );
    byte[] outBytes = baos.toByteArray();
    os.write(outBytes, 0, out.length);
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...