小技巧Android技术知识Android知识

Retrofit2+okhttp3,post请求,各种文件上传。

2017-03-29  本文已影响2957人  _醉生梦死


前言:

之前写了两篇,第一篇是关于最简单和基本的配置,第二篇是如何设置拦截器做缓存处理的。还是接着上面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请求了。然后有不懂的欢迎给我留言。另外公众号求关注一波。所有的文字全部是纯手打原创的。

上一篇 下一篇

猜你喜欢

热点阅读