Retrofit+Rxjava怎么实现文件上传和下载功能
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天小编给大家分享一下Retrofit+Rxjava怎么实现文件上传和下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文
千家信息网最后更新 2025年01月23日Retrofit+Rxjava怎么实现文件上传和下载功能
今天小编给大家分享一下Retrofit+Rxjava怎么实现文件上传和下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Retrofit简介:
在Android API4.4之后,Google官方使用了square公司推出的okHttp替换了HttpClient的请求方式。后来square公司又推出了基于okHttp的网络请求框架:Retrofit。
什么是 RxJava?
RxJava 是一个响应式编程框架,采用观察者设计模式。所以自然少不了 Observable 和 Subscriber 这两个东东了。
还有一个RxAndroid,用于 Android 开发,添加了 Android 用的接口。
1.上传
首先说一下单文件上传,一般上传头像等会用到 .
1).写api @Multipart
@POST
( "" )//引号内为地址Observable httpName(@PartMultipartBody.Part file);
2).写presenter的方法
public void httpName(File file) {RequestBody requestBody = RequestBody. create (MediaType. parse ( "image/png" ), file);MultipartBody.Part part = MultipartBody.Part. createFormData ( "file" , file.getName() , requestBody);Observable observable = api. httpName (part);…rajava+retrofit处理逻辑}
3)调用方法发起请求
mPresenter. httpName (f);
其中f我为你要上传的文件对象
以图片为例,经过裁剪后将其转化为文件对象方法如下
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {if (data != null) {Bundle bundle = data.getExtras();if (bundle != null) {bitmap = bundle.getParcelable("data");File f = new File(this.getFilesDir(), (new Date()).getTime() + ".png");if (f.exists()) {f.delete();}try {FileOutputStream out = new FileOutputStream(f);bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);out.flush();out.close();} catch (FileNotFoundException e) {e.printStackTrace();f = null;} catch (IOException e) {e.printStackTrace();f = null;}if (f != null) {mPresenter. httpName(f);}}}//括号可能多或者少,自己添吧
再说一下多文件上传,以及附带有参数的请求,类似这样
mPresenter.httpUpLoadMore(id,phone, File1, File2, File3);@Multipart@POST("")ObservablehttpUpLoadMore (@Query("id") String id, @Query("phone") String phone, @Part MultipartBody.Part file1, @Part MultipartBody.Part file2, @Part MultipartBody.Part file3);
这里附带参数用@FieldMap Map maps也可以,用query好像不太恰当
后面只需要像传单文件一样
RequestBody requestBody1/2/3 = RequestBody.create(MediaType.parse("image/png"), file1/2/3);;MultipartBody.Part part1/2/3 = MultipartBody.Part.createFormData("file", file1/2/3.getName() , requestBody1/2/3);Observable bservable= api.httpUpLoadMore(id,phone,part1,part2,part3);……
2下载
1)写api
@Streaming//下载大文件时需要加上@GETObservable > download(@Url String url);
2)Presenter方法
mApi.download (path).subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).flatMap(new Func1,Observable>() {@Overridepublic Observablecall(Response response) {boolean b = writeToFile(response, file);//将返回的流转写入到file对象中final Boolean aBoolean =Boolean.valueOf(b);return Observable.create(new Observable.OnSubscribe(){@Overridepublic void call(Subscriber subscriber) {try {subscriber.onNext(aBoolean);subscriber.onCompleted();} catch (Exceptione) {subscriber.onError(ExceptionManager.handleException(e));}}});}}).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1(){@Overridepublic void call(Boolean bean) {}}, new Action1(){@Overridepublic void call(Throwablethrowable) {}});[if !supportLineBreakNewLine][endif]private boolean writeToFile(Responsebody,File file) {try {InputStream inputStream = null;OutputStream outputStream = null;try {byte[] fileReader = new byte[2048];inputStream =body.body().byteStream();outputStream = new FileOutputStream(file);while (true) {int read =inputStream.read(fileReader);if (read == -1) break;outputStream.write(fileReader, 0, read);}outputStream.flush();return true;} catch (IOException e) {return false;} finally {if (inputStream != null) {inputStream.close();}if (outputStream != null) {outputStream.close();}}} catch (IOException e) {return false;}}
3)调用方法发起下载请求
mPresenter.httpToDownload(downPath, file);//file为你下载下来的文件要存放的位置
以上就是"Retrofit+Rxjava怎么实现文件上传和下载功能"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
文件
方法
知识
篇文章
对象
功能
公司
内容
参数
框架
逻辑
不同
很大
恰当
少不了
两个
传单
位置
图片
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
移动网无法连接暗黑3服务器
北京新东方学校软件开发
数据库语言练习
市教育局网络安全周活动方案
为啥手机号显示无服务器
互联网公司属于高科技产业吗
网络安全爆发期
f2pool无法连接服务器
linux 服务器安全工具
基岩版服务器怎么下载模组
如何维护网络安全毛概
技术服务类和软件开发哪个好
住建局网络安全会议记录
应届生 数据库方向
网络安全实习生职业计划
sql 数据库远程
去除数据库中的重复想
广东软通动力网络技术
数据库与redis 一致性核对
网络安全员职业资格
网络安全链路讲解
软件开发用r7还是i7
上海创视通录播服务器电话代理商
怎样查看大数据库地址
网络安全不止仿冒钓鱼黑客入侵
前端开发 软件软件开发
跨境电商目前的网络安全
p2dr网络安全架构
亚马逊个人文档服务器
创艺网络技术运营