Передача изображения по гессианскому протоколу из папки клиента на сервер tomcat

Моя цель - загрузить изображение (.jpg или .png) из папки клиента на сервер tomcat6 через гессенский протокол. И выполните обработку изображения с помощью opencv на сервере, а затем верните изображение клиенту.

Вопрос 1. Верны ли следующие шаги переноса?

  • поместить изображение test.jpg в папку клиента
    --> преобразовать test.jpg в класс client.java (main.java) в BufferedImage
    --> преобразовать BufferedImage в мат или Iplimage в сервер для используя openCV.

Я установил образец приветствия из Простой пример обмена сообщениями с использованием Hessian и выполнял поиск на Hessian с большими двоичными данными и других веб-сайтах, но до сих пор не знаю, как его использовать!

Вопрос 2. Есть ли похожий пример кода Java?

(Я использую ubuntu12+netbeans7.2)


person 子昂 陳    schedule 25.09.2012    source источник


Ответы (1)


Похоже, вы, вероятно, хотите обрабатывать изображение как поток байтов на клиенте вместо использования BufferedImage. После обработки вы можете делать все, что хотите, но будет проще использовать гессиан, если вы просто отправите содержимое файла.

Hessian понимает InputStream как тип. Таким образом, ваш минимальный API вызова метода может выглядеть так:

InputStream convert(InputStream upload);

Клиент откроет входной поток в исходный файл и отправит этот входной поток напрямую:

InputStream is = new FileInputStream("test.jpg");
InputStream resultIs = hessianProxy.convert(is);
.... // save the result

Небольшое предостережение: гессенское ответное соединение будет активным до тех пор, пока вы не закончите чтение входного потока, поэтому читать его нужно немедленно. (Он не буферизуется, и это одна из причин, по которой он может быть эффективным.)

На сервере нужно читать из входного потока (опять же сразу). И в результате верните InputStream, который считывает преобразованное изображение:

InputStream convert(InputStream is) {
  ... // read from 'is' to your internal data
  InputStream result = ... // process
  return result;
}

Вы захотите убедиться, что поток ввода результатов автоматически закрывает что-либо в конце файла. Возможно, вы захотите создать оболочку для вызова close().

person Scott Ferguson    schedule 01.10.2012
comment
Я использовал FileInputStream и FileOutputStream, и он работает при загрузке изображения с клиента на сервер, но не работает в обратном направлении. Итак, мне интересно, работает ли метод, предоставленный Скоттом, при загрузке изображения с сервера на клиент? Или есть другой способ сделать это. спасибо тонн! - person 子昂 陳; 02.10.2012