Retrofit2 实现多文件上传及进度监听

最近又把 Retrofit 上传文件的功能折腾了一遍,觉得有必要做个爬坑记录

Retrofit2 实现多文件上传及进度监听_第1张图片
字数太少图片来凑

不废话直接开车,无图无真相先上个效果图:

上传文件进度监听效果

不想听我瞎几把扯的这里贴心的给了源码传送门

接下来真的开车了,好像缺点东西没有说明,那在打个广告,既然是上传文件那肯定是要有服务器的对吧,然并卵我只是一个wanAndroid 的菜鸟,哪里会搞服务器啊

Retrofit2 实现多文件上传及进度监听_第2张图片
真的尴尬

幸好 Http File Server,替我解决了这个,给个以前写的这个工具的使用说明:星际传送

下面真的开车了,一切从简(对于 Retrofit + rxJava 的组合进行网络请求都是熟悉的了,不熟悉网上也有大把的博客供撸,这里就不多扯了)

主要记录下我的爬坑经历,主要说思路,详细的代码逻辑可以去下载源码查看

1、Retrofit本身是不支持文件上传进度显示的

2、使用 Retrofit 上传文件,需要手动把文件转换成 MultipartBody.Part 或者 MultipartBody作为参数,只是提供一个文件用于上传,可我们前后构造了三个对象:File ----》RequestBody ----》MultipartBody.Part,如果是上传多个文件那么就要在还没有执行上传操作之前使用循环把 File 转换成 MultipartBody.Part,并添加到集合,然后再执行上传,这操作就太难过了

经过一番搜索浏览大量博客,发现大多是解决了问题1,问题2只查到这篇博客有介绍(提供了自定义转换器的方案予以解决,感谢大佬 ^_^);

关于问题1 简单记录一下方案(详细可以查看 demo:FileProgressRequestBody类):由于Retrofit 自带的RequestBody不支持监听上传进度,所以需要我们自己扩展一个RequestBody来实现进度显示;

关于问题2 已经知道了解决方案,直接按照Retrofit  自定义 Converter 的流程创建一个 FileConverterFactory 并在初始化 Retrofit 时候 调用addConverterFactory()即可,如下截图:

Retrofit2 实现多文件上传及进度监听_第3张图片
代码截图,具体可下载源码
Retrofit2 实现多文件上传及进度监听_第4张图片
定义上传文件方法

这些都配置ok了后,就可以上传文件了

Retrofit2 实现多文件上传及进度监听_第5张图片
代码截图,具体可下载源码

关于上传参数,ArrayMap 集合里添加参数

1、需要上传的 文件路径集合 key 值:"filePathList"(或者文件集合 key 值:"files");

2、UploadOnSubscribe 是扩展Rxjava 的发射器,主要用于计算文件上传百分比并发射进度百分比数到观察者对象( key 值:"UploadOnSubscribe")

具体原因是 自定义的 FileRequestBodyConverter 请求转换器里会获取 ArrayMap 集合的数据,最后进行转换为 Retrofit 上传文件的对象类型,如下图

Retrofit2 实现多文件上传及进度监听_第6张图片
最后一个截图了

好不好就这样了,全书完..............................................................

你可能感兴趣的:(Retrofit2 实现多文件上传及进度监听)