Retrofit 2使用要點梳理:淺析POST文件/表單上傳

本博客爲作者原創,如需轉載請註明處處:https://blog.csdn.net/wusj3/article/details/102462499


Retrofit 2定義網絡請求是通過註解的方式,所以自然我們這裏就用到了@POST 註解來提交我們的圖片文件的二進制數據,需要注意用@Part MultipartBody.Part 註解來定義我們要上傳的圖片文件,用@Part("attribute") RequestBody 直接來定義請求中的字符串字段,代碼具體如下:

  @Multipart
  @POST(URL.UPLOAD_LOGO)
  Flowable<BaseVo<UploadLogoVo>> uploadLogo(
      @Part("id") RequestBody id,
      @Part("username") RequestBody username,
      @Part("deviceId") RequestBody deviceId,
      @Part MultipartBody.Part image
  );

接下來,我們需要在MainActivity 中調用DetectService 接口定義的uploadLogo() 方法發起網絡請求,在發起網絡請求是,我們需要先創建一下接口方法中定義的4個請求參數,具體代碼如下:

  public void uploadLogo(String path, RxSubscriber<BaseVo<UploadLogoVo>, UploadLogoVo> subscriber) {
    RequestBody idBody = RequestBody.create(MediaType.parse("multipart/form-data"), String.valueOf(PrefConstant.getUserId()));
    RequestBody usernameBody = RequestBody.create(MediaType.parse("multipart/form-data"), PrefConstant.getUserPhone());
    RequestBody deviceIdBody = RequestBody.create(MediaType.parse("multipart/form-data"), DeviceUtils.getUniqueDeviceId());
    //這裏的MediaType.parse方法傳入和服務器一致文件類型
    RequestBody logoBody = RequestBody.create(MediaType.parse("image/jpeg"), new File(path));
// 創建RequestBody,傳入參數:"multipart/form-data",File
//    RequestBody requestImgFile = RequestBody.create(MediaType.parse("multipart/form-data"), imgFile);
// 創建MultipartBody.Part,用於封裝文件數據
    MultipartBody.Part requestImgPart =
        MultipartBody.Part.createFormData("logo", new File(path).getName(), logoBody);
    addDisposable(mApiService.uploadLogo(idBody, usernameBody, deviceIdBody, requestImgPart)
        .compose(RxSchedulers.io_main())
        .subscribeWith(subscriber));
  }

至此,通過Retrofit 2 @POST 註解上傳文件二進制數據到服務器就完成啦,OK!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章