Как отправить изображение с Android на сервлет, а затем сохранить его - PullRequest
1 голос
/ 10 июня 2011

Я пытаюсь отправить фотографию по http на мой сервер.Поэтому я конвертирую изображение в байты, а затем отправляю его в виде пары имя-значение.Вот мой код ниже для этого.Теперь моя проблема на стороне сервера, как я могу восстановить и сохранить изображение из строки полученных байтов

Я также использую сервлеты Java

Код на Android

ByteArrayOutputStream baos = new ByteArrayOutputStream();
pinnedV.getPhoto().compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();

List<NameValuePair> params = new ArrayList<NameValuePair>(2);
params.add(new BasicNameValuePair("photo",new String(b)));

HttpClient httpclient = new DefaultHttpClient();  
    HttpPost request = new HttpPost(URL);

    try {
        request.setEntity(new UrlEncodedFormEntity(params));
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    ResponseHandler<String> handler = new BasicResponseHandler();  
     try {  
         result = httpclient.execute(request, handler);  
     } catch (ClientProtocolException e) {  
         e.printStackTrace();  
     } catch (IOException e) {  
         e.printStackTrace();  
    }  

Код на сервере

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String fromClientphoto= request.getParameter("photo");
byte[] b = fromClientphoto.getBytes();

FileOutputStream fos = new FileOutputStream("D:\\img.png");
     fos.write(b);
     fos.close(); 
}

Этот код выше записывает файл, но не открывается как изображение.также это byte[] b = fromClientphoto.getBytes(); правильный способ конвертировать обратно в те же байты, что и на телефоне Android?есть идеи?

Ответы [ 3 ]

1 голос
/ 07 августа 2012

См. Ссылку:

Передача изображения на андроид из Java через сокеты

Объясняет, как использовать класс Java.

Это может вам помочь.

0 голосов
/ 28 ноября 2011

Вы не должны отправлять файл (то есть изображение) как обычный параметр имя-значение со своего устройства и читать его с помощью request.getParameter(name);.

Вместо:

  • На стороне Android используйте MultipartEntity (см. другие вопросы ).Это уже часть httpclient.
  • На стороне сервера вы можете найти apache-fileupload полезной (или другую библиотеку, которая может помочь вам прочитать многокомпонентный контент, полученный в вашем сервлете)
0 голосов
/ 10 июня 2011

Не беспокойтесь об изображении инструментария, просто запишите содержимое в файл.

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

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