Retrofit 2.0 图文上传

最近搞个功能,文件和别的参数一起上传,本人比较渣,之前做的是把String参数拼在Url后面一起传给后台,

===============================新==============================

/**
 * 修改个人信息
 */
@Multipart
@POST(Configs.Url.MODIFY_PERSONAL)
Observable<BaseHttpResult> modifyPersonal(@PartMap Map<String, RequestBody> map, @Part MultipartBody.Part body);
MultipartBody.Part part = null;
if (file != null) {
    RequestBody imageBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
    part = MultipartBody.Part.createFormData("image", file.getName(), imageBody);
} else {
    part = MultipartBody.Part.createFormData("", "");//如果图片不是必须上传的====
}

Map<String, RequestBody> map = new HashMap<>();
map.put("nickname", RequestBody.create(MediaType.parse("text/plain"), etNickname.getText().toString().trim()));

RetrofitManager.getInstance().getApi().modifyPersonal(map, part)
.subscribeOn(Schedulers.newThread())
.compose(ScheduleTransformer.<BaseHttpResult>switchSchedulers())
.subscribe(new BaseObserver() {
    @Override
    public void onSuccess(BaseHttpResult result) {
        hideProgressDialog();
        showToast(result.getMsg());
        EventBus.getDefault().post(new EventCenter(Configs.REFRESH_DATA));
        finish();
    }

    @Override
    public void onErrorMessage(String msg) {
        hideProgressDialog();
        showToast(msg);
    }
});

===============================新==============================

//上传轮播图---单张上传
@Multipart
@POST()
Observable<ResultMsgModel> uploadBannerImage(@Url String url, @Part MultipartBody.Part body);

 

 
Observable.just(file)
        .subscribeOn(Schedulers.io())
        .unsubscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .flatMap(new Function<List<File>, ObservableSource<File>>() {
            @Override
            public ObservableSource<File> apply(@io.reactivex.annotations.NonNull List<File> file1) throws Exception {

                return Observable.fromIterable(file1);
            }
        })
        .concatMap(new Function<File, ObservableSource<ResultMsgModel>>() {
            @Override
            public ObservableSource<ResultMsgModel> apply(@io.reactivex.annotations.NonNull File file) throws Exception {
                RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);

             
                MultipartBody.Part parts = MultipartBody.Part.createFormData("car", file.getName(), requestFile);

                return Retrofit2Manager.getObservable(Retrofit2Manager.getService().uploadBannerImage(Configs.Url.SaveCarou
                        + "?id=" + "&storeId=" + SharePreferenceUtil.getStoreId() + "&status=" + isShow
                        + "&caUrl=" + url + "&sort=", parts));
            }
        })
        .map(new Function<ResultMsgModel, String>() {
            @Override
            public String apply(@io.reactivex.annotations.NonNull ResultMsgModel resultMsgModel) throws Exception {

                return resultMsgModel.getMsg();
            }
        })
        .subscribe(new Consumer<String>() {
            @Override
            public void accept(@io.reactivex.annotations.NonNull String string) throws Exception {

                dismissDialog();

                if (string.equalsIgnoreCase("success")) {
                    ToastUtil.show(StoreActivity.this, "上传图片成功!");
                    finish();
                } else {
                    ToastUtil.show(StoreActivity.this, "上传图片失败,请重试!");
                }

            }
        }, new BaseThrowConsumer(this) {
            @Override
            protected void accepted(@io.reactivex.annotations.NonNull Throwable throwable) throws Exception {
                fail("上传图片失败");
                dismissDialog();
            }
        });

之前是这样上传的,但是总感觉上传的Url不是很好看,其实百度一下网上有好多的,一直没看懂,感觉下面的用起来优雅一点

 

//修改个人信息
@POST(Configs.Url.editPersonal)
Observable<ModifyPersonalModel> modifyInfo(@Body RequestBody Body);
File header = new File(path);
//构建body
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
        .addFormDataPart("mobile", etTel.getText().toString())
        .addFormDataPart("trueName", etName.getText().toString())
        .addFormDataPart("sex", String.valueOf(sexId))
        .addFormDataPart("user_id", String.valueOf(SharePreferenceUtil.getUserId()))
        .addFormDataPart("hea", header.getName(), RequestBody.create(MediaType.parse("image/*"), header))
        .build();

mDisposable = Retrofit2Manager.getObservable(Retrofit2Manager.getService().modifyInfo(requestBody))

这里只是记录下,太渣,总忘

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值