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

相关文章

okhttp3的详细介绍

这篇文章说下OkHttp的基本用法,是最新的3哦,如果你曾经在网上搜索OkHttp怎么使用发现有些类没有了可能是因为人家说的是2。首先说下OkHttp3是Java和Android都能用,Android还有一个著名网络库叫Volley,那个只有Android能用。导入自己到入jar包,别漏了okio:okhttp-3.3.0.jarokio-1.8.0.jarmaven方式:<dependen

hdfs java客户端使用,文件上传下载,预览的实现

1. 环境部署        1.1 Linux hadoop集群搭建 Hadoop大数据集群搭建(超详细)_hadoop集群搭建-CSDN博客        1.2 windows hadoop util 安装       Hadoop——Windows系统下Hadoop单机环境搭建_hadoop windows开发环境搭建-CSDN博客         1.3 温馨提示,如果要使用ja

JSP中实现文件上传下载

JSP中实现文件上传下载 文章目录 JSP中实现文件上传下载前言一、文件上传1、将jar包放入WEB-INF目录下的lib目录2、实现upload.jsp3、实现MyUploadServlet 二、文件下载1.download.jsp2.MyDownloadServlet 前言 在java web开发中,实现单个或多个文件的上传下载,可以借助jspsmartupload.

Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习)...

Hadoop Shell命令(基于linux操作系统上传下载文件到hdfs文件系统基本命令学习) Apache-->hadoop的官网文档命令学习:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS s

OkHttp3基础使用

目录 前言一、依赖引入二、使用方式2.1 get请求2.1.1 同步请求2.1.2 异步请求2.1.3 取消请求2.1.4 结果处理 2.2 post请求2.2.1 同步post2.2.2 异步post2.2.3 post请求提交多种格式2.2.3.1 post请求提交String、文件2.2.3.2 post请求提交表单2.2.3.3 post请求提交复杂请求体 2.3 请求配置项2.4

Java学习之道:Java上传下载excel、解析Excel、生成Excel的问题

在软件开发过程中难免需要批量上传与下载,生成报表保存也是常有之事,最近集团门户开发用到了Excel模版下载,Excel生成,圆满完成,对这一知识点进行整理,资源共享,有不足之处还望批评指正,文章结尾提供了所需jar包的下载,方便大伙使用,下面言归正传!     1.Excel的下载       1)Action中:          添加响应事件,通过getRealPath获得工程路

javaweb学习(day14-ThreadLocal文件上传下载)

一、线程数据共享和安全 -ThreadLocal 1 什么是 ThreadLocal ThreadLocal 的作用,可以实现在同一个线程数据共享, 从而解决多线程数据安全问题. ThreadLocal 可以给当前线程关联一个数据(普通变量、对象、数组)set 方法 [源码!] ThreadLocal 可以像 Map 一样存取数据,key 为当前线程, get 方法 每一个 ThreadL

使用 OKhttp3 实现 智普AI ChatGLM HTTP 调用(SSE、异步、同步)

SSE 调用 SSE(Sever-Sent Event),就是浏览器向服务器发送一个HTTP请求,保持长连接,服务器不断单向地向浏览器推送“信息”(message),这么做是为了节约网络资源,不用一直发请求,建立新连接。 // 创建请求对象Request request = new Request.Builder().url(String.format(sseApi, seeId))//

C# 获取windows的上传下载速度

直接利用CZGL.SystemInfo代码 UnitType.cs /// <summary>/// 单位/// </summary>public enum UnitType : int{/// <summary>/// Byte/// </summary>/// B = 0,/// <summary>/// KB/// </summary>KB,/// <summary>/// MB

上传下载接口

【1】上传接口 POST form-data请求: URL:http://nginxIP:nginxPort/isa-eoms-service-taskflow-special/attachmentService/uploadFile 入参: uploadFile: 文件 fileType: (枚举:document, image, flash, video, all。该参数可不传,默认为all