本博客爲作者原創,如需轉載請註明處處: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!