2016-12-12 7 views
0

Я пытаюсь написать код для отправки jpg-изображений на сервер, который может получать запросы JSON. Эти изображения хранятся на устройстве. Я в основном портирую код Python, который использует Requests: HTTP for Humans для связи с сервером. До сих пор мне удалось установить связь с кодом, который я наклеил ниже. Поэтому я вижу некоторую надежду.Отправить jpg изображения на сервер (json)

 // JAVA code on Android 
    String URL = BASE_URL + "/relative_url"; 

    JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.POST, URL, null, 
      new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.i(TAG, "Successful POST request"); 
        try { 
         sceneid = response.getInt("id"); 
         Log.i(TAG, "Scene id: " + sceneid); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.i(TAG, "Bad POST request"); 
       } 
      }) { 
       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> headers = new HashMap<>(); 
        String credentials = "myuser:mypass"; 
        String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 
        headers.put("Authorization", auth); 
        return headers; 
       } 
    }; 
    queue.add(postRequest); 

Однако, я не могу реплицировать код Python ниже. Я уже тщательно проверил решение в Интернете, но мне не удалось заставить его работать. Решения, которые я нашел, либо используют устаревшие библиотеки, либо код не работает. Команда в python, которую я пытаюсь реплицировать:

# Python code to replicate in JAVA 
auth = {'myuser', 'mypass'} 
file = {'jpgdata': open('myimg.jpg','rb')} 
req = requests.post(BASE_URL + '/relative_url', params={'param', param}, files=file, auth=auth) 

Некоторая помощь будет действительно оценена.

Заранее спасибо.

ответ

0
public static String BitMapToString(Bitmap bitmap) { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     byte[] b = baos.toByteArray(); 
     String temp = null; 
     try { 
      System.gc(); 
      temp = Base64.encodeToString(b, Base64.DEFAULT); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } catch (OutOfMemoryError e) { 
      baos = new ByteArrayOutputStream(); 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos); 
      b = baos.toByteArray(); 
      temp = Base64.encodeToString(b, Base64.DEFAULT); 
      Log.e("EWN", "Out of memory error catched"); 
     } 
     return temp; 
    } 

Используйте этот код и отправьте строку изображения на сервер. Надеюсь вам помочь.

+0

Я попытался реализовать эту часть. Сначала я конвертирую изображение в растровое изображение «bitmap = BitmapFactory.decodeFile (imgPath)»; и затем я применяю вашу функцию «String image = BitMapToString (bitmap);». Затем в параметрах я добавляю его следующим образом: «params.put (« jpgdata », изображение); Однако у меня есть ошибка 400. – Poiex