Rxjava2+Retrofit2上傳圖片加參數失敗問題解決

我在寫圖片選擇時用戶要求可以多張選擇,可是之前的圖片工具類只能單張選擇,恰好在github上找到了rxgalleryfinal這個庫,就想拿來用一下,沒想到studio一直報重復導入的問題,查詢半天發現了問題所在:rxgalleryfinal內部用的是retrofit2+rxjava2的網絡框架,而項目用的還是一直沿用之前的retrofit+rxjava的舊框架,rxjava和rxjava2無法共存所以報錯,在將框架全部更新后發現之前上傳圖片時添加的參數出現了問題.


image.png

后臺接口要求的是修改頭像時要傳一個token,而普通上傳比如發布動態時不傳即可,所有的上傳圖片通用這一個接口

之前因為是rxjava1所以用的都是observable,換成rxjava后使用可以解決背壓問題的flowable,retrofit注解只能使用一個,用了@multipart注解后就不能再添加表單注解,所以查了下網上給出的方法是講@Field替換為@Part,如下代碼

這是retrofit實現類中的接口:

@POST("user/upload")  
@Multipart  
Flowable<BaseResponse<List<String>>> upload(@Part("token") String token,  
                                            @Part MultipartBody.Part part); 

接口實現類中的方法

@Override  
public Flowable<BaseResponse<List<String>>> upload(String token, String path) {  
    File file = new File(path);  
    RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/jpg"), file);  
    MultipartBody.Part photoPart = MultipartBody.Part.createFormData("file", file.getName(), photoRequestBody);  
    return api.upload(token, photoPart);  
} 

這種方法傳token是錯誤的,應該在上傳圖片時將token封到

MultipartBody.Builder

如下代碼,或者將上面的@Part("token) String token改為 @Part("token) RequestBody token即可
代碼中將token添加到requestbody中
RequestBody tokenBody = RequestBody.create(MediaType.parse("text/plain"), token);

以下代碼適用多張圖片上傳,循環添加到builder中即可

@POST("user/upload")  
@Multipart  
Flowable<BaseResponse<List<String>>> upload(@Part List<MultipartBody.Part> parts);

@Override  
public Flowable<BaseResponse<List<String>>> upload(String token, String path) {  
  File file = new File(path);  
  MultipartBody.Builder builder = new MultipartBody.Builder()  
          .setType(MultipartBody.FORM)//表單類型  
          .addFormDataPart("token", token);  
  RequestBody photoRequestBody = RequestBody.create(MediaType.parse("image/jpg"), file);  
  builder.addFormDataPart("file", file.getName(), photoRequestBody);  
  List<MultipartBody.Part> parts = builder.build().parts();  
  return api.upload(parts);  
 }

單張圖片上傳傳參時去掉List,如果加參數則添加到requestbody中再上傳

參考文章:http://blog.csdn.net/itjianghuxiaoxiong/article/details/52135748

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容