2015-12-21 17 views
11

Ciao AndroidUploaders,Android okHttp addFormDataPart in modo dinamico per Immagine multipla

avevo dato risposta Uploading a large file in multipart using OkHttp ma io sono bloccato con più caricamento delle immagini.

Desidero caricare dinamicamente l'immagine da 1 a 10 da 1 a 10 alla volta.

RequestBody requestBody = new MultipartBuilder() 
        .type(MultipartBuilder.FORM) 
        .addFormDataPart(KEY_PHOTO_CAPTION, photoCaption) 
        .addFormDataPart(KEY_FILE, "profile.png", RequestBody.create(MEDIA_TYPE_PNG, sourceFile)) 
        .build(); 

ho ArrayList di Photocaption classe che ha captionPhoto e urlPhoto Così come posso addFormDataPart()

sto pensando di fare loop e chiamare questa funzione che molte volte di ArrayList dimensioni.

Esiste una soluzione per l'uso di addFormDataPart() in modo dinamico?

risposta

15

Questa risposta è per OkHttp2

Per OkHttp3 Si può vedere this post.

Per immagini multiple è sufficiente eseguire il loop in base alle proprie esigenze, la parte rimanente relativa alla richiesta sarà uguale a quella dell'utente.

// final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); 
final MediaType MEDIA_TYPE=MediaType.parse(AppConstant.arrImages.get(i).getMediaType()); 

//If you can have multiple file types, set it in ArrayList 
        MultipartBuilder buildernew = new MultipartBuilder().type(MultipartBuilder.FORM) 
          .addFormDataPart("title", title) 

        for (int i = 0; i < AppConstants.arrImages.size(); i++) { 
         File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
           TEMP_FILE_NAME + i + ".png"); 
         if (f.exists()) { 
          buildernew.addFormDataPart(TEMP_FILE_NAME + i, TEMP_FILE_NAME + i + FILE_EXTENSION, RequestBody.create(MEDIA_TYPE, f)); 
         } 
        } 
        RequestBody requestBody = buildernew.build(); 
        Request request = new Request.Builder() 
          .url(Url.URL + Url.INSERT_NEWS) 
          .post(requestBody) 
          .build(); 

        OkHttpClient client = new OkHttpClient(); 
        Response response = client.newCall(request).execute(); 
        return response.body().string(); 

Non dimenticate di eliminare Temp. file che hai caricato se non è di alcuna utilità.

+0

Sto selezionando dinamicamente come ** 2 png **, ** 3 gif ** e ** 5 jpeg ** allora? –

+2

** Aggiornamento maggio 2016 **: MultipartBuilder è ora sostituito da MultipartBody.Builder ;-) – PAD

17

Qui ho creato la funzione per caricare più immagini.

/** 
* Here I am uploading MultipleImages from List of photoCaption 
* Sending photoCaption with URL and Caption of Photo... 
* 
* @param albumId 
* @param photoCaptions 
* @return 
*/ 
public static JSONObject uploadAlbumImage(String albumId, ArrayList<PhotoCaption> photoCaptions) { 

    try { 

     MultipartBuilder multipartBuilder = new MultipartBuilder().type(MultipartBuilder.FORM); 

     int length = photoCaptions.size(); 
     int noOfImageToSend = 0; 
     for(int i = 0; i < length; i++) { 
      /** 
      * Getting Photo Caption and URL 
      */ 
      PhotoCaption photoCaptionObj = photoCaptions.get(i); 
      String photoUrl = photoCaptionObj.getPhotoUrl(); 
      String photoCaption = photoCaptionObj.getPhotoCaption(); 

      File sourceFile = new File(photoUrl); 

      if(sourceFile.exists()) { 
       /** Changing Media Type whether JPEG or PNG **/ 
       final MediaType MEDIA_TYPE = MediaType.parse(FileUtils.getExtension(photoUrl).endsWith("png") ? "image/png" : "image/jpeg"); 

       /** Adding in MultipartBuilder **/ 
       multipartBuilder.addFormDataPart(KEY_IMAGE_CAPTION + i, photoCaption); 
       multipartBuilder.addFormDataPart(KEY_IMAGE_NAME + i, sourceFile.getName(), RequestBody.create(MEDIA_TYPE, sourceFile)); 

       /** Counting No Of Images **/ 
       noOfImageToSend++; 
      } 
     } 

     RequestBody requestBody = multipartBuilder 
       .addFormDataPart(KEY_ALBUM_ID, albumId) 
       .addFormDataPart(KEY_IMAGE_COUNT, String.valueOf(noOfImageToSend)) 
       .build(); 

     Request request = new Request.Builder() 
       .url(URL_ALBUM_UPLOAD_IMAGE) 
       .post(requestBody) 
       .build(); 

     OkHttpClient client = new OkHttpClient(); 
     Response response = client.newCall(request).execute(); 

     /** Your Response **/ 
     String responseStr = response.body().string(); 

     Log.i(TAG, "responseStr : "+ responseStr); 

     return new JSONObject(responseStr); 

    } catch (UnknownHostException | UnsupportedEncodingException e) { 
     Log.e(TAG, "Error: " + e.getLocalizedMessage()); 
    } catch (Exception e) { 
     Log.e(TAG, "Other Error: " + e.getLocalizedMessage()); 
    } 
    return null; 
} 

Spero che ti possa essere d'aiuto.

+0

Controlla risposta modificata per [** okhttp3 **] (http://stackoverflow.com/a/34127008/1318946) –

+1

Grazie, Mi hai salvato il tempo. Grazie ancora..........:) – Shailesh

Problemi correlati