Retrofit2+okhttp3,post请求,各种文件上传。
![](https://img.haomeiwen.com/i1784987/57be1b72ddd671da.jpeg)
前言:
之前写了两篇,第一篇是关于最简单和基本的配置,第二篇是如何设置拦截器做缓存处理的。还是接着上面2篇文章继续往下讲。我们来了解下Retrofit2+okhttp3的post请求。上传等功能。
正文:
我们先来了解下关于httppost协议。
这是post的报文。请求头,空行,请求实体。
Connection:表示是否需要持续链接 keep-alive就是需要持续链接。
Content-Type:此次请求的的内容形式,一般只有post提交的时候才需要此属性。这里的multipart/form-data表示文件上传。还有一些其他的分别代表不同的功能。
Boundary。这个是一个特殊的字符串,对实体快数据进行分段的,例如一次性上传1张图片1段json数据,就会通过这个字符串来分开。上面的图红色框框里面就是实体的一个Part。
实体里面也有content-Dispositon,content-Type,content-Lenth.都是一些协议,告诉服务器文件名字。接收类型等,然后是数据。
了解了这些下面来说说Retrofit,Post吧。
一、 路径的配置方法:
有这样3种方式,不需要解释了吧。静态动态。
二、 header的配置
这里大家注意了这个和之前的缓存设置头部是一样的,但是不是设置到同一个对象上面,缓存是设置到response返回的数据头上面。这个是请求头request大家别搞混淆了。
如果有不知道的可以ctrl点击进去看怎么用。第二种到时候传一个Map进来就可以了,第三种是直接传字符串进来可以了。
三、 重点来了。上传参数的配置
1.最简单的key-value的参数发送。
同样的也可以使用@FiledMapMap map然后到时候传map来就可以了。
这样就可以使用了。
注意使用了@Field或者@FiledMap必须用@FormUrlEncoded来修饰,主要是讲请求表单网址编码
2.上传json字符串
ApiServer这么写
参数和接收
报文:
3上传图片
用了Part,PartMap注解方法上面必须加@MultiPart因为用了这个这个表示请求实体是有多个部分组成的。
先看看报文吧
然后看看我们在代码里面设置了什么控制了什么
第一个个我们设置了Content-Type格式为image/png上传的格式,然后是设置了Content-disposition里面的name 和fileName
4多文件混合上传
我们只需要将文件放入在map里面就可以了。
这个是结果
我想通过这些大家应该基本上了解了post请求了。然后有不懂的欢迎给我留言。另外公众号求关注一波。所有的文字全部是纯手打原创的。
![](http://upload-images.jianshu.io/upload_images/1784987-1e35cc91fe445b33.jpg)