2015-12-17 10 views
6

Ho cercato nel web ma ho trovato solo il codice relativo ai dati di moduli multipart, non la spiegazione di cosa sono e come vengono utilizzati?Che cosa sono esattamente MultiPartEntity e Dati modulo? Come vengono utilizzati per caricare immagini in Android?

+0

In ' Dati in formato multiparto 'è possibile inviare dati con 'String',' File' e 'Byte'too. Ha i suoi diversi tipi di parti del corpo tra cui 'StringBodyPart',' FileBodyPart', 'ByteArrayBodyPart()' ecc ecc. Ha anche un limite limitato per impostare anche i tuoi dati. Questa è la comprensione di base per te! – Piyush

+0

Scusa..per la risposta tardiva ... puoi anche spiegare come multiPartEntity è diverso da dati MultiPart Form –

+0

Entità MultiPart significa che puoi inviare dati in gruppo con diversi parametri del corpo come String, File e Byte ecc. Anche quando vedi codice demo quindi puoi capire di più! – Piyush

risposta

2

Normalmente Stiamo inviando solo una parte stringa di dati, mentre nella parte del file multipart viene aggiunto con la stringa, quindi la sua chiamata esempio multipart.for Siamo in grado di inviare dati a più parti utilizzando volley

public class MultipartReq extends JsonObjectRequest { 

     private static final String FILE_PART_NAME = "file"; 
     private static final String STRING_PART_NAME = "text"; 

     private final File mFilePart; 
     //private final String mStringPart; 


     MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); 
     HttpEntity httpEntity; 
     Context context; 

     private Map<String, String> params; 
     public MultipartReq(Context context, int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener, File file, Map<String, String> params) { 
      super(method, url, jsonRequest, listener, errorListener); 

      this.context = context; 
      mFilePart = file; 
      entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);  
      this.params = params; 
      buildMultipartEntity(); 
      httpEntity = entityBuilder.build(); 

     } 


     private void buildMultipartEntity() { 

      try { 
       if (mFilePart.exists()) {           entityBuilder.addBinaryBody(FILE_PART_NAME, mFilePart, ContentType.create(mimeType), mFilePart.getName()); 

        } 
        try { 
         if(!params.isEmpty()){ 
          for (String key: params.keySet()){ 
           entityBuilder.addPart(key, new StringBody(params.get(key),ContentType.TEXT_PLAIN)); 

          } 
         } 
        } catch (Exception e) { 
         VolleyLog.e("UnsupportedEncodingException"); 
        } 


       } else { 
        ShowLog.e("no such file"); 
       } 
      } catch (Exception e) { 
       ShowLog.e("UnsupportedEncodingException"); 
      } 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> params = new HashMap<String, String>(); 

      return params; 
     } 


     @Override 
     public String getBodyContentType() { 
      return httpEntity.getContentType().getValue(); 
     } 

     @Override 
     public byte[] getBody() { 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      try { 
       httpEntity.writeTo(bos); 
      } catch (IOException e) { 
       VolleyLog.e("IOException writing to ByteArrayOutputStream"); 
      } 
      return bos.toByteArray(); 
     } 


     @Override 
     protected void deliverResponse(JSONObject response) { 
      super.deliverResponse(response); 
     } 
    } 
+0

Hey grazie ... sono in grado di implementarlo ora –

+0

Non ho dimenticato di accettare la mia risposta se è stato aiutato –

0

Converti bitmap in byte [ ] using-

public static byte[] bitmapToBlob(Bitmap bitmap) { 
    if (bitmap == null) { 
     return null; 
    } 

    Log.w("bitmapToBlob", "bitmap getHeight = " + bitmap.getHeight()); 
    Log.w("bitmapToBlob", "bitmapgetWidth = " + bitmap.getWidth()); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

    bitmap.compress(Bitmap.CompressFormat.JPEG, 
      Some_value_0_to_100, baos); 

    return baos.toByteArray(); 
} 

Usare questa funzione per caricare un'immagine come byte []

private static void postToUrl3(String url_to_upload_on, 
    String file_name_with_ext, byte[] byteArray) { 

CloseableHttpClient httpClient = null; 

try { 

    httpClient = HttpClientBuilder.create().build(); 

    HttpPost postRequest = new HttpPost(url_to_upload_on); 


    MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create(); 
    reqEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);    
    ByteArrayBody bab = new ByteArrayBody(byteArray, file_name_with_ext);   
    reqEntity.addPart("file", bab);   
    postRequest.setEntity(reqEntity.build()); 


    httpClient.execute(postRequest);// takes time 

} catch (Exception e) { 
    Log.w("uploadToBlobStore", "postToUrl Exception e = " + e); 
    e.printStackTrace(); 
} finally { 
    if (httpClient != null) { 
     Log.w("uploadToBlobStore", "connection.closing "); 
     try { 
      httpClient.close(); 
     } catch (IOException e) { 
      Log.w("uploadToBlobStore", "connection.closing errot e = " 
        + e); 
      e.printStackTrace(); 
     } 
    } 
} 
} 

Modifica 1-

I dati multipart/form vengono utilizzati in html per inviare dati con più parti (come suggerisce il nome). Qualsiasi tipo di dati può essere aggiunto ad esso. stringa, file, ecc. MultiPartEntity è il calss che dosa la stessa cosa su java. È possibile aggiungere più parti di dati a questa entità, ad esempio reqEntity.addPart("Id", new StringBody("ID")); o qualsiasi altro tipo di corpo.

MA vedere quello a cui mai server che si sta inviando questo, quel server dovrebbe funzionare accordingly.I dire se si utilizza reqEntity.addPart("Id", new StringBody("ID")); il server dovrebbe essere alla ricerca di un campo con il nome "Id" e fare qualche cosa con esso. il server può anche dare una risposta se configurato per farlo it.You possono ottenere risposta utilizzando HttpResponse response = httpClient.execute(postRequest); sviluppatori

PS-Compagni si prega di modificare e migliorare la mia risposta in modo che io possa sapere di più troppo, o se io sono errati

+0

grazie..le cose sono un po 'chiare ora –

Problemi correlati