2016-01-21 102 views
10

文件如何管理文件的動態數量的上傳與OkHttp V3,我已經與OkHttp的舊版本這是compile 'com.squareup.okhttp:okhttp:2.6.0'上傳動態數與okHttp3

有類形式和多一些變化實施身體現在被建模。他們用更強大的FormBody和FormBody.Builder組合替換了不透明的FormEncodingBuilder。同樣,他們已將MultipartBuilder升級爲MultipartBody,MultipartBody.Part和MultipartBody.Builder。

下面的代碼是舊版本

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. 

但現在OkHttp文件上傳<version>3.0.1</version>代碼實現類似下面的代碼(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(); 

我試着用同樣的邏輯MultipartBody但沒有找到任何有效的解決方案。 或者是否需要爲不同的情況執行相同的if else(這是不可行的)

回答

13

構建器仍然存在,可用於此目的。將其存儲在本地,就像您之前所做的一樣,並在循環中進行修改:

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

,謝謝您的回答.............. –