Отправить изображение (jpg) через HttpPost с Android на Servlet (WebServer) - PullRequest
2 голосов
/ 29 октября 2010

У меня на SD-карте есть изображение (типа jpg), и я пытаюсь отправить изображение через HttpPost в мой сервлет, работающий на Apache Tomcat 7.0

Пока у меня есть способ сделать это, но я не могу найти идеальный способ.

Есть ли у кого-нибудь из вас какие-либо предложения или решения этой проблемы?

Заранее спасибо, Сэмми Стеван Джап

Ответы [ 2 ]

1 голос
/ 29 октября 2010

HttpClient - это класс, который нужно использовать, и для него есть учебник .См. Раздел Использование HTTP-клиента , сразу после рисунков.

ОБНОВЛЕНИЕ
Ниже приведен комментарий к учебному примеру Developerlife.com .Хорошая вещь в этом примере состоит в том, что он демонстрирует, как отправлять различные типы данных путем кодирования одного типа в другой.Можно отправить любой из типов, используемых в этой цепочке преобразований данных, начиная с точки в цепочке, которая соответствует типу отправляемых данных:

Строки помещаются в Hashtable , который записывается в ObjectOutputStream , который поддерживается ByteArrayOutputStream , который преобразуется в ByteArray, который, в свою очередь, преобразуется в ByteArrayEntity для передачи.

Чтобы отправить только ByteArray , пропустите все шаги, которые происходят, прежде чем данные станут ByteArray .Перейдите в строку 26, где ByteArray создается с toByteArray().

. Для отправки других типов выполните следующее (согласно примеру):
Строка 26: ByteArray, просто используйте его, чтобы сделать ByteArrayEntity
Строка 26: ByteArrayOutputStream , преобразовать его в ByteArray
Строка 24: ObjectOutputStreams : создать их в ByteArrayOutputStreams
Строка 25: Объекты : записать Строки , Хеш-таблицы и т. Д. В ObjectOutputStream .

 1 /** this method is called in a non-"edt" thread */
 2 private void _doInBackgroundPost() {
 3   Log.i(getClass().getSimpleName(), "background task - start");
 4 
 5 
 6   Hashtable<String, String> map = new Hashtable();
 7   map.put("uid", uid);
 8   map.put("pwd", pwd);
 9 
10   try {
11     HttpParams params = new BasicHttpParams();
12 
13     // set params for connection...
14     HttpConnectionParams.setStaleCheckingEnabled(params, false);
15     HttpConnectionParams.setConnectionTimeout(params, NetworkConnectionTimeout_ms);
16     HttpConnectionParams.setSoTimeout(params, NetworkConnectionTimeout_ms);
17     DefaultHttpClient httpClient = new DefaultHttpClient(params);
18 
19     // create post method
20     HttpPost postMethod = new HttpPost(LoginServiceUri);
21 
22     // create request entity
23     ByteArrayOutputStream baos = new ByteArrayOutputStream();
24     ObjectOutputStream oos = new ObjectOutputStream(baos);
25     oos.writeObject(map);
26     ByteArrayEntity req_entity = new ByteArrayEntity(baos.toByteArray());
27     req_entity.setContentType(MIMETypeConstantsIF.BINARY_TYPE);
28 
0 голосов
/ 20 апреля 2011

Я сделал это немного чище, но с помощью веб-формы asp.net. Я уверен, что кто-то может легко сделать это в сервлете. Вы можете найти мое решение здесь .

ура

Фахар

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