Retrofit2.0轻松实现上传

Retrofit2.0轻松实现上传

今日科技快讯

昨日,网友爆料称,支付宝手机端可以无需给账号绑定的手机发送验证码,而通过“识别好友、识别近期购买物品”等一系列的操作来找回登录密码,这时就可以直接扫二维码付款!对此,支付宝很快做出升级,并表示:升级后仅在用户自己的手机上,才能通过上述方式来找回登录密码。但是,支付宝的此次事件已经让一些用户的安全感降到冰点,因为如果手机丢了简直不敢想象!

作者简介

本篇是 Tamic 的第三篇投稿,分享了 Retrotfit2.0 如何上传文件等等。本篇作者对 Retrofit 其实有一系列的讲解,对Retrofit感兴趣的朋友可以访问下方的博客地址。

Tamic 的博客地址:

http://www.jianshu.com/u/3bbb1ddf4fd5

使用Retrofit 1.X 上传

大家都知道在2.0以前版本上传图片的姿势:

Retrofit2.0轻松实现上传

Retrofit 2.X 上传文件

使用2.0,我们发现以前的 TypedFile 类型被私有化了 ,无法继续使用1.9的传方式,因此2.x提供了上传方案,可以 MultipartBody.Part 代替。

Retrofit2.0轻松实现上传

具体用法

先看一个基本的用法:

Retrofit2.0轻松实现上传

上报一张图片

Retrofit2.0轻松实现上传

上报数量确定的多张图片

Retrofit2.0轻松实现上传

如果图片数量不确定

Retrofit2.0轻松实现上传

或者:

Retrofit2.0轻松实现上传

图文同时上报

Part方式

Retrofit2.0轻松实现上传

扩展一下:

Retrofit2.0轻松实现上传

java代码:

Retrofit2.0轻松实现上传

更简单的用Body方式:

@POST()Call<ResponseBody> upLoad(
   @Url() String url,
   @Body RequestBody Body);

Java代码:

Retrofit2.0轻松实现上传

此种方式让你很好的解决了用户注册问题,包含用户全部信息和头像,完美解决你想用表单一起将文字和图片一起提交的情况!

表单提交

很多时候想用表单的方式:

@[email protected]("upload/")
Call<ResponseBody> register(
   @Body RequestBody body);

Java代码:

Retrofit2.0轻松实现上传

Json提交

上传Json

@POST("/uploadJson")
Observable<ResponseBody> uploadjson(
   @Body RequestBody jsonBody);

upLoadJson 也可以具体指明Content-Type 为 “application/json”格式的

具体组装我们的 RequestBody 则可以这样:

Retrofit2.0轻松实现上传

接着可以这样调用:

Retrofit2.0轻松实现上传

至于服务器返回什么类型的 model, 开发者可以自定义, 譬如你可以把 APi 中的 ResponseBody 指定为你自己的 javaBean, 当然上层构建 Call 时候,Callback 也必须是 Call<MyBean>

@POST("/uploadJson")
Call<MyBean> uploadjson(
   @Body RequestBody jsonBody);

仔细的朋友会发现有的地方用 Call,有的地方用 Observable,如果结合了 RxJava 就是用后者接收了,这里不关乎什么方式。

上面的代码片段中显示的代码初始化(RequestBody 和 description), 以及如何使用文件上传API。正如刚开始已经提到的, 从 OkHttp 的 RequestBody类 中,需要两个 RequestBody.create() 方法

除了 Body 描述, 必须将添加文件包装成 MultipartBody 的实例。这就是你需要使用适当的从客户端上传文件到服务端。此外, 您可以添加 createFormData 中的 uploadFile(Uri fileUri) 方法,适合相机拍照回来上传图片的场景。

Retrofit2.0轻松实现上传

通过以上代码片段,可以构造自己的 file, 其他构建 ResquestBody 的步骤同上所示,以上案列总有一款适合你的web后端。

设置 Content-Type

请注意设置的内容类型。如果你拦截底层 OkHttp 客户端和更改内容类型为 application / json, 你的服务器可能反序列化过程出现的问题。请确保你没有自定义更改 multipart/form-data。

upLoad 图片也可以具体指明 Content-Type 为 “image/jpg”格式的

Retrofit2.0轻松实现上传

上传文件到服务端示例

如果你已经有你的后端项目, 您可以依靠下面的示例代码。我们使用一个 简单api 上传到服务器。此外我们告诉 api 传入参数的请求, 因为我们使用的是 Node.js

解析的回调函数,我们记录每个字段来显示其输出。

Retrofit2.0轻松实现上传

Android客户端收到返回类型的字符串, 我们将接收到的上传成功的状态的回调。当然你可以处理也可以不处理状态。下面你将看到一个成功的请求的输出端和有效载荷的解析。第一个空对象。之后,你可以看到字段只描述作为请求的一部分。接着可以收到文件描述,文件大小,文件昵称和保存路径。

服务器解析有效数据的日志

Retrofit2.0轻松实现上传

回顾

文件上传是应用程序中必不可却少的功能, 你可以将此功能集成在您的应用程序使用。本文指导您完成你的Android程序上报文件到您的后端服务器的第一个步骤。

源码:

https://github.com/Tamicer/Novate

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

Retrofit2.0轻松实现上传

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:

Retrofit2.0轻松实现上传