retorfit2+okhttp3文件上传下载

2024-02-25 13:58

本文主要是介绍retorfit2+okhttp3文件上传下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

创建一个网络请求接口ApiService,后续项目中所有网络请求均在该接口中定义:

常见网络请求格式和参数书写

1 GET方式请求——–无参请求

/**比如完整路径https://api.app.com/vi/my/home.json*  baseUrl指的是https://api.app.com/vi/*  显而易见my/home.json是完整路径除baseUrl之外的部分*/
@GET("my/home.json")
Flowable<BaseEntity<MyHomeEntity>> getMyHome();

2 GET方式请求——–有参请求(如果参数有多个继续在后面累加即可)

/**比如完整路径https://api.app.com/vi/my/home.json?ordersn=123*/
@GET("my/home.json")
Flowable<BaseEntity<MyHomeEntity>> getMyHome(@Query("ordersn") String ordersn);使用方式
ApiService apiService = retrofit.create(ApiService.class);apiService.getMyHome("123").map(new Function<BaseEntity<MyHomeEntity>, MyHomeEntity>() {@Overridepublic UserLoginEntity apply(@NonNull BaseEntity<MyHomeEntity> myHomeEntityBaseEntity) throws Exception {return myHomeEntityBaseEntity.data;}})//以下两行表示在io现在请求网络,成功之后回调到mainThread主线程.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<MyHomeEntity>() {@Overridepublic void accept(@NonNull MyHomeEntity myHomeEntity) throws Exception {System.out.println("=========" + myHomeEntity.toString());}});

3 POST登录请求

@Headers("Content-type:application/json; charset=utf-8")
@POST("user/login.json")//UserInfo存储账号和密码
Flowable<BaseEntity<UserLoginEntity>> getUserLogin(@Body UserInfo info);/*** Created by zhang on 2017/4/14 15 : 19.*/
public class UserInfo {//username和password不需要自己定义名字,这是服务器需要的字段名private String username;private String password;public UserInfo(String username, String password) {this.password = password;this.username = username;}
}apiService.getUserLogin(new UserInfo("13400000003", "123456"));

4 文件下载

/**如果下载路径和baseurl部分相同,则使用下面这种方式*/@GET("download/app.pak")
@Streaming//如果下载较大的文件必须添加该注解
Flowable<ResponseBody> downloadingApk();/**如果下载路径和baseurl部分不相同,则使用下面这种方式*/
@GET
@Streaming//如果下载较大的文件必须添加该注解
Flowable<ResponseBody> downloadingApk(@Url String url);ps:返回类型一定要是ResponseBody,不然接收不到数据subscribe = apiService.downloadingApk(url).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<ResponseBody>() {@Overridepublic void accept(@NonNull ResponseBody responseBody) throws Exception {if (responseBody != null){String info = "文件大小====="+responseBody.bytes().length;}}});

5 文件上传几种方式

/**第一种方式:如果服务器要求参数(ordersn)需要依GET形式拼接到url后面,写成一下方式即可file是要上传的文件,单个文件上传必须这样写**/
@Multipart
@POST("My/comment.uploadCmtPic.json")
Flowable<BaseEntity<UploadCmtPicEntity>> uploadPic(@Query("ordersn") String ordersn,@Part MultipartBody.Part file);/**第二种方式:如果服务器需要的参数不是第一种方式,则参数应该封装到Multipart中,否则服务器接收不到**/
@Multipart
@POST("My/comment.uploadCmtPic.json")
Flowable<BaseEntity<UploadCmtPicEntity>> uploadPic(@Part MultipartBody.Part pram,@Part MultipartBody.Part file);/**第三种方式:多个文件上传**/
@Multipart
@POST("My/comment.uploadCmtPic.json")
Flowable<BaseEntity<UploadCmtPicEntity>> uploadPic(@Part List<MultipartBody.Part> file);第一种方式为例://需要上传的文件File file = new File(Environment.getExternalStorageDirectory(),"/abc.png");//上传类型为form表单RequestBody requestFile = RequestBody.create(MultipartBody.FORM, file);//cmt_pic为服务器定义的字段MultipartBody.Part body = MultipartBody.Part.createFormData("cmt_pic", file.getName(), requestFile);String ordersn = "123456789";apiService.uploadPic(ordersn,body)

这篇关于retorfit2+okhttp3文件上传下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745691

相关文章

Vue3+elementplus实现图片上传下载(最强实践)

图片上传子组件: 实现照片的上传,预览,以及转成以逗号隔开的图片地址,即时监听,并发送消息到父组件。 <!-- ImageUploader.vue --> <template><div><el-upload class="avatar-uploader" :http-request="customUpload" :before-upload="beforeUpload":show-fil

SpringMVC基于注解使用:上传下载

01-文件下载 基于servlet api的文件下载 注意一点content-disposition是以文件下载的方式打开意思是客户端地址栏不会改变, 如果注销了那句话就会跳转到下载图片的图片里面去,就在网页中显示了 基于spring ResponseEntity的文件下载 不支持缓冲区 一次性读取所有数据的方法 Spring MVC 为文件上传提供了直接

OkHttp3源码分析[任务队列]

本文目录: 线程池基础反向代理模型OkHttp的任务调度 看过Wiki的都知道OkHttp拥有2种运行方式,一种是同步阻塞调用并直接返回的形式,另一种是通过内部线程池分发调度实现非阻塞的异步回调。本文主要分析第二种,即OkHttp在多并发网络下的分发调度过程。本文主要分析的是Dispatcher对象 1. 线程池基础 在初学android的时候,各位可能会用new Thread +

OkHttp3源码分析[缓存策略]

OkHttp系列文章如下 OkHttp3源码分析[综述]OkHttp3源码分析[复用连接池]OkHttp3源码分析[缓存策略]OkHttp3源码分析[DiskLruCache]OkHttp3源码分析[任务队列] 本文专门分析OkHttp的缓存策略,应该是okhttp分析中最简单的一篇了 HTTP缓存基础知识 在分析源码之前,我们先回顾一下http的缓存Header的含义 1. Exp

OkHttp3源码分析[复用连接池]

OkHttp系列文章如下 OkHttp3源码分析[综述]OkHttp3源码分析[复用连接池]OkHttp3源码分析[缓存策略]OkHttp3源码分析[DiskLruCache]OkHttp3源码分析[任务队列] 1. 概述 HTTP中的keepalive连接在网络性能优化中,对于延迟降低与速度提升的有非常重要的作用。 通常我们进行http连接时,首先进行tcp握手,然后传输数据,最后释

JavaWeb 文件上传下载和图片验证码

超详细的Java知识点路线图 文件上传 这里使用的是Apache的common-fileupload包 准备工作: 下载导入jar包 common-fileupload 文件上传 common-io 文件IO在JSP的fom标签中,添加属性:enctype=“multipart/form-data”,请求方法必须是post表单中使用file控件上传 相关API: ServletFil

java web 一行代码实现文件上传下载

每当要实现文件上传下载的功能时,都要复制粘贴拼凑代码。如果用了不同的框架,代码还不一样,配置啥的一堆,甚是繁琐,不喜欢。科学家们喜欢把纷繁复杂的自然现象总结为一个个简洁的公式,我们也来试试,把上传下载整成一行代码~        花了一天时间,整了个通用的工具类FileUtils,这个类里实际只包含两个静态方法,一个上传upload(),一个下载download()。只依赖apac

okHttp3总结

目录 1 okhttp3总体流程2 Request、Response、Call基本概念2.1 OkHttp3总体流程解析2.2 流程源码 1 okhttp3总体流程 下图摘抄自网络 图1.1 okHttp3总体流程图   2 Request、Response、Call基本概念 Request request主要是对url,请求方法,请求参数,请求头等参数进

Jsp+Servlet实现文件上传下载——前台页面开发

JSP和Servlet都是J2EE的规范,JSP全名为Java Server Pages,中文名叫java服务器页面,它是在传统的网页HTML文件中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件。Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端 程序。其主要功能在于交互式地浏览和修改数据,生成动

Linux系统安装rz/sz实现本地和服务器文件上传下载

一:说明     通过SecureCRT等SSH登录软件连接服务器,可以通过rz和sz命令上传下载文件,就不需要通过xftp进行文件操作了. sz 文件名: 将选定的文件发送(send)到本地机器; rz:运行该命令会弹出 一个文件选择窗口, 从本地选择文件上传到服务器(receive). 二:安装 1、获取安装包 wget http://www.ohse.de/uwe