2016-01-21 19 views
10

Come gestire upload di serie dinamica di file con OkHttp v3, ho già implementato con la versione precedente di OkHttp quali era compile 'com.squareup.okhttp:okhttp:2.6.0'Carica il numero dinamica di file con okHttp3

ci sono alcuni cambiamenti nel modulo di classe e Multipart i corpi sono ora modellati. Hanno sostituito l'opaco FormEncodingBuilder con la più potente combo FormBody e FormBody.Builder. Allo stesso modo hanno aggiornato MultipartBuilder in MultipartBody, MultipartBody.Part e MultipartBody.Builder.

sottostante Codice è di versione precedente

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); //Here you can add the fix number of data. 

for (int i = 0; i < AppConstants.arrImages.size(); i++) { //loop to add dynamic number of files. 
    File f = new File(FILE_PATH,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(); 

//Build the object of MultipartBuilder and get object of RequestBody. 

Ma ora OkHttp implementazione <version>3.0.1</version> codice per il caricamento di file è qualcosa di simile al di sotto del codice (source)

RequestBody requestBody = new MultipartBody.Builder() 
     .setType(MultipartBody.FORM) 
     .addFormDataPart("title", "Square Logo") 
     .addFormDataPart("image", "logo-square.png", 
      RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png"))) 
     .build(); 

ho provato la stessa logica con MultipartBody ma non ha trovato alcuna soluzione fruttuosa. Oppure è necessario implementare lo stesso if else per diversi casi. (Che non è possibile)

risposta

13

Il builder esiste ancora e può essere utilizzato per questo. Memorizzalo in un locale come lo facevi prima e modifica il ciclo:

MultipartBody.Builder buildernew = new MultipartBody.Builder() 
     .setType(MultipartBody.FORM) 
     .addFormDataPart("title", title); //Here you can add the fix number of data. 

for (int i = 0; i < AppConstants.arrImages.size(); i++) { 
    File f = new File(FILE_PATH,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)); 
    } 
} 

MultipartBody requestBody = buildernew.build(); 
+0

, grazie per la risposta .............. –