2016-01-21 13 views
10

Wie Upload der dynamischen Anzahl von Dateien verwalten mit OkHttp v3, ich habe bereits mit älterer Version von OkHttp implementiert, die compile 'com.squareup.okhttp:okhttp:2.6.0'Hochladen dynamische Anzahl von Dateien mit okHttp3

Es gibt einige Änderungen in der Klasse Form und Mehrteiliger waren Körper werden jetzt modelliert. Sie haben den undurchsichtigen FormEncodingBuilder durch die leistungsfähigere FormBody und FormBody.Builder-Kombination ersetzt. Ebenso haben sie MultipartBuilder in MultipartBody, MultipartBody.Part und MultipartBody.Builder aktualisiert.

Code unten ist der ältere Version

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. 

Aber jetzt OkHttp<version>3.0.1</version> Code-Implementierung für Datei-Upload ist wie etwas unterhalb Code (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(); 

habe ich versucht, die gleiche Logik mit MultipartBody, aber keine fruchtbare Lösung gefunden. Oder muss ich das gleiche if else für verschiedene Fälle implementieren. (Was nicht machbar ist)

Antwort

13

Der Builder existiert noch und kann dafür verwendet werden. Speichern Sie es in einem lokalen wie zuvor und ändern Sie es in der Schleife:

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

, danke für die Antwort .............. –