【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件上传(三)
最近手头事比较多,抽个空把之前系列也补充一下。
先回顾下之前的
【Android架构】基于MVP模式的Retrofit2+RXjava封装(一)
【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件下载(二)
今天要说的是文件上传
1.单图上传
首先ApiServer,要使用Multipart 注解
//上传图片(私有接口)
  @POST("index.php/PrivateApi/Goods/uploadPic")
  @Multipart
  Observable<BaseListModel<String>> upLoadImg(@Part MultipartBody.Part parts);
 
 然后是Presenter
 public void upLoadImg(String path) {
        File file = new File(path);
        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part filePart = MultipartBody.Part.createFormData("headimg", file.getName(), requestFile);
        addDisposable(apiServer.upLoadImg(filePart), new BaseObserver<BaseListModel<String>>(baseView, true) {
            @Override
            public void onSuccess(BaseListModel<String> o) {
                baseView.onUpLoadSucc(o.getData());
            }
            @Override
            public void onError(String msg) {
                baseView.showError(msg);
            }
        });
    }
 
 成功后做个提示就好
2.多图上传
ApiServer
 @POST("index.php/PrivateApi/Goods/uploadPic")
    @Multipart
    Observable<BaseListModel<String>> upLoadImg(@Part MultipartBody.Part[] parts);
 
 Presenter
 public void upLoadImg(ArrayList<String> media) {
        if (media == null) {
            return;
        }
        MultipartBody.Part[] parts = new MultipartBody.Part[media.size()];
        int cnt = 0;
        for (String m : media) {
            File file = new File(m);
            RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
            MultipartBody.Part filePart = MultipartBody.Part.createFormData("headimg[]", file.getName(), requestFile);
            parts[cnt] = filePart;
            cnt++;
        }
     
        addDisposable(apiServer.upLoadImg(parts), new BaseObserver<BaseListModel<String>>(baseView, true) {
            @Override
            public void onSuccess(BaseListModel<String> o) {
                baseView.onUpLoadSucc(o.getData());
            }
            @Override
            public void onError(String msg) {
                baseView.showError(msg);
            }
        });
    }
 
 3.文件和普通参数混合
ApiServer
  //上传图片(私有接口)
    @POST("index.php/PrivateApi/Goods/uploadPic")
    @Multipart
    Observable<BaseListModel<String>> upLoadImg(@Part MultipartBody.Part[] parts, @Part("APP_KEY") RequestBody APP_KEY, @Part("APP_TOKEN") RequestBody APP_TOKEN);
 
 Presenter
 public void upLoadImg(ArrayList<String> media) {
        if (media == null) {
            return;
        }
        MultipartBody.Part[] parts = new MultipartBody.Part[media.size()];
        int cnt = 0;
        for (String m : media) {
            File file = new File(m);
            RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
            MultipartBody.Part filePart = MultipartBody.Part.createFormData("headimg[]", file.getName(), requestFile);
            parts[cnt] = filePart;
            cnt++;
        }
        RequestBody appkey = RequestBody.create(MediaType.parse("multipart/form-data"), AppConstant.APP_KEY);
        RequestBody apptoken = RequestBody.create(MediaType.parse("multipart/form-data"), UserImpl.getAppToken());
//
        addDisposable(apiServer.upLoadImg(parts, appkey, apptoken), new BaseObserver<BaseListModel<String>>(baseView, true) {
            @Override
            public void onSuccess(BaseListModel<String> o) {
                baseView.onUpLoadSucc(o.getData());
            }
            @Override
            public void onError(String msg) {
                baseView.showError(msg);
            }
        });
    }
 
 至此,使用Retrofit文件上传暂时告一段落。
你的认可,是我坚持更新博客的动力,如果觉得有用,就请点个赞,谢谢
关注公众号
					低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								    
								
								【Android架构】基于MVP模式的Retrofit2+RXjava封装之文件下载(二)
上篇中我们介绍了基于MVP的Retrofit2+RXjava封装,还没有看的点击这里,这一篇我们来说说文件下载的实现。 首先,我们先在ApiServer定义好调用的接口 @GET Observable<ResponseBody> downloadFile(@Url String fileUrl); 接着定义一个接口,下载成功后用来回调 public interface FileView extends BaseView { void onSuccess(File file); } 接着是Observer,建议与处理普通接口的Observer区分处理 public abstract class FileObsever extends BaseObserver<ResponseBody> { private String path; public FileObsever(BaseView view, String path) { super(view); this.path = path; } @Override protected void onStart() {...
 - 
							
								
								    下一篇
								    
								
								阿里云获得SAP HANA 2T实例公共云认证
2018年7月,阿里云正式通过SAP HANA 2T实例的公共云平台认证,成为国内首批通过该规格实例认证的公共云服务提供商之一。 随着企业数字化转型深入,企业业务高速增长,业务种类持续丰富,企业的业务数据也像滚雪球般越滚越多。SAP HANA实例的最大规格从1T提升至2T,可更快速处理大规模企业数据,提升企业决策效率,快速响应瞬息万变的市场需求。据了解,今年内阿里云或将推出4T内存的更大规格SAP HANA 实例。 SAP HANA是目前业内最具影响力的内存数据库产品之一。通过实现大数据量的全内存处理,SAP HANA真正实现了数据的“实时”处理和业务的“实时”分析。 SAP是全球领先的企业应用软件公司,在全球拥有38万家各种规模的客户,其中包括92%的《福布斯》全球2000强企业。2016年4月,阿里云与SAP达成战略合作。2017年
 
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
 - SpringBoot2编写第一个Controller,响应你的http请求并返回结果
 - CentOS7,8上快速安装Gitea,搭建Git服务器
 - Eclipse初始化配置,告别卡顿、闪退、编译时间过长
 - SpringBoot2整合Thymeleaf,官方推荐html解决方案
 - SpringBoot2全家桶,快速入门学习开发网站教程
 - MySQL表碎片整理
 - CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
 - CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
 - Docker快速安装Oracle11G,搭建oracle11g学习环境
 

			
				
				
				
				
				
				
				
微信收款码
支付宝收款码