2013-12-09 5 views
1

Я выкладываю несколько значений от андроида к серверу с помощью многочастногоОтправка несколько изображений на сервер от андроида

То, что я сделал - я могу послать одно изображения (от андроида Drawable) на сервер.

мой подарок Код:

try 
     { 
      Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new HttpPost("http://10.0.2.2:7002/Details/"); 
      MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      try{ 
       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       bitmapOrg.compress(CompressFormat.JPEG, 75, bos); 
       byte[] data = bos.toByteArray(); 
       ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg"); 
       reqEntity.addPart("key", bab); 
      } 
      catch(Exception e){ 
       //Log.v("Exception in Image", ""+e); 
       reqEntity.addPart("picture", new StringBody("")); 
      } 
      postRequest.setEntity(reqEntity);  
      HttpResponse response = httpClient.execute(postRequest); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
      String sResponse; 
      StringBuilder s = new StringBuilder(); 
      while ((sResponse = reader.readLine()) != null) { 
       s = s.append(sResponse); 
      } 
     }catch(Exception e){ 
      e.getStackTrace(); 
     } 

как отправить два изображения :: это предложил моя модель

try 
     { 
         Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); 
         Bitmap bitmapOrg2 = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher2); 

      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new  HttpPost("http://10.0.2.2:7002/Details/"); 
      MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      try{ 
       ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

           bitmapOrg.compress(CompressFormat.JPEG, 75, bos);  
           bitmapOrg2.compress(CompressFormat.JPEG, 75, bos); 

           byte[] data = bos.toByteArray(); 

        ByteArrayBody bab = new ByteArrayBody(data, "forest.jpg"); 
           ByteArrayBody bab2 = new ByteArrayBody(data, "earth.jpg"); 

           reqEntity.addPart("key", bab); 
           reqEntity.addPart("key1", bab2); 
      } 
      catch(Exception e){ 
       //Log.v("Exception in Image", ""+e); 
       reqEntity.addPart("picture", new StringBody("")); 
      } 
      postRequest.setEntity(reqEntity);  
      HttpResponse response = httpClient.execute(postRequest); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
      String sResponse; 
      StringBuilder s = new StringBuilder(); 
      while ((sResponse = reader.readLine()) != null) { 
       s = s.append(sResponse); 
      } 
     }catch(Exception e){ 
      e.getStackTrace(); 
     } 

Мой вопрос ::Я следую правильному пути передачи нескольких изображений выше или есть лучший способ сделать это?

+0

Это, вероятно, дубликат: http://stackoverflow.com/questions/2017414/post-multipart-request-with-android-sdk?lq=1 –

ответ

1

Да, есть лучший способ загрузить или загрузить несколько файлов. Прежде всего вы должны определить AsyncTask, а в его функции doInBackground вы должны написать свой код для загрузки/скачивания файла.

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

new MyAsyncTask(fileUrl1).execute(); 
new MyAsyncTask(fileUrl2).execute(); 

Это лучше и более управляемым способом, чтобы использовать HTTP-запросов.

Надеюсь, что я вам помог. Good Luck

+0

@AndroidNabzThis это простая вещь, как загрузить оба типа данные по одиночному api .... Единый метод для загрузки строки и изображения Как это может Dun, если вы знаете? – Amitsharma

0

Мой способ сделать это:

public String getStringImage(Bitmap bmp) { 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     bmp.compress(Bitmap.CompressFormat.JPEG, 40, baos); 
     byte[] imageBytes = baos.toByteArray(); 
     return Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    } 

и отправить изображение в виде строки

В серверном (Использование Стройный Framework):

$image = $app->request()->post('img_p'); 

file_put_contents($my_path, base64_decode($image)); 

Я не уверен, это лучший способ, но он работает.

Смежные вопросы