Retrofit+Rxjava怎么实现文件上传和下载功能
发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天小编给大家分享一下Retrofit+Rxjava怎么实现文件上传和下载功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文
千家信息网最后更新 2026年10月31日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("")Observable httpUpLoadMore (@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安全错误
数据库的锁怎样保障安全
互联网科技有限公司
广州大一互联网络科技有限公司
深圳恒合互联网络科技有限公司
疫情对互联网科技公司影响
科技类互联网
有马互联网科技
互联网科技股票
互联网科技媒体
广西拼得多互联网科技有限公司
宁波青枫互联网科技有限公司
银川新华互联网科技职业技术培训学校图片
移动互联网科技股
广州恒生互联网科技有限
华夏互联网科技业
互联网科技大奖都有哪些公司
科技互联网海报
上海钢联属于互联网科技股吗
神州科技互联网有限公司
普陀区互联网教育科技管理办法
互联网高科技行业有哪些企业
中国互联网科技发展
艾特科技互联网
亿人帮互联网科技
甘肃拓世互联网科技有限公司
广西拼得多互联网科技有限公司
富国互联网科技创新基金
成都玖崟互联网科技有限公司乐商圈怎么样
字节跳动和互联网科技
萌小萌互联网科技河南有限公司
互联网科技创新方面的资料