Android必知必会-使用okhttp的PUT方式上传文件

注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望CSDN能更好的支持移动端。

背景

公司的文件上传接口使用PUT协议,之前一直用的都是老项目中的上传类,现在项目中使用了okhttp网络库,就查了下资料,在这里分享一下。

代码实现

okhttp 2.7.X

    /**
     * @param mediaType MediaType
     * @param uploadUrl put请求地址
     * @param localPath 本地文件路径
     * @return 响应的结果 和 HTTP status code
     * @throws IOException
     */
    public String put(MediaType mediaType, String uploadUrl, String localPath) throws IOException {
        File file = new File(localPath);
        RequestBody body = RequestBody.create(mediaType, file);
        Request request = new Request.Builder()
                .url(uploadUrl)
                .put(body)
                .build();
        Response response = client.newCall(request).execute();
        return response.code()+ ":" + response.body().string() ;
    }

    //上传JPG图片
    public String putImg(String uploadUrl, String localPath) throws IOException {
        MediaType Image = MediaType.parse("image/jpeg; charset=utf-8");
        return put(Image, uploadUrl, localPath);
    }

可能还需要进行的设置:修改各种Timeout

OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(30, TimeUnit.SECONDS);
client.setReadTimeout(15, TimeUnit.SECONDS);
client.setWriteTimeout(30, TimeUnit.SECONDS);

okhttp 3.X

    /**
     * @param mediaType MediaType
     * @param uploadUrl put请求地址
     * @param localPath 本地文件路径
     * @return 响应的结果 和 HTTP status code
     * @throws IOException
     */
    public String put(MediaType mediaType, String uploadUrl, String localPath) throws IOException {
        File file = new File(localPath);
        RequestBody body = RequestBody.create(mediaType, file);
        Request request = new Request.Builder()
                .url(uploadUrl)
                .put(body)
                .build();
        //修改各种 Timeout
        OkHttpClient client = new OkHttpClient.Builder()
                .connectTimeout(600, TimeUnit.SECONDS)
                .readTimeout(200, TimeUnit.SECONDS)
                .writeTimeout(600, TimeUnit.SECONDS)
                .build();
        //如果不需要可以直接写成 OkHttpClient client = new OkHttpClient.Builder().build();

        Response response = client
                .newCall(request)
                .execute();
        return response.body().string() + ":" + response.code();
    }

//上传JPG图片
    public String putImg(String uploadUrl, String localPath) throws IOException {
        MediaType imageType = MediaType.parse("image/jpeg; charset=utf-8");
        return put(imageType, uploadUrl, localPath);
    }

总结

以上是最基本的代码实现,你还可以加上自己的各种监听。 下面是okhttp其他方面更加详细的介绍:

GitHub:okhttp Android必知必会-使用okhttp的PUT方式上传文件 OkHttp使用教程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MongoDB中文社区

常见问题:MongoDB诊断

·为什么MongoDB会记录这么多“Connection Accepted”事件?

17130
来自专栏TencentDB使用小节

数据库监控断点业务中断的一种案例及分析

问题已经分析出来了,就是某个SQL阻塞了其他请求,那么如何找到这条SQL呢?有两种方式

12830
来自专栏世民谈云计算

理解OpenShift(7):基于 Prometheus 的集群监控

理解OpenShift(5):从 Docker Volume 到 OpenShift Persistent Volume

20440
来自专栏宜信技术实践

可用性高达五个9!支付系统高可用架构设计实战

对于互联网应用和企业大型应用而言,多数都尽可能地要求做到7*24小时不间断运行,而要做到完全不间断运行可以说“难于上青天”。为此,对应用可用性程度的衡量标准一般...

13830
来自专栏DotNet Core圈圈

SQL Server之索引解析(一)

微软专门给出SQL Server设计思路及实现路线,从7大体系结构阐述是如何实现,通过了解这些,我们就可以总结出数据库设计原则、编程中sql写法及注意事项,从而...

18960
来自专栏小陈学Python

Python 模块:abc

模块abc提供了在 Python 中定义 抽象基类 (ABC) 的组件,在 PEP 3119 中已有概述。查看 PEP 文档了解为什么需要在 Python 中增...

16120
来自专栏菲宇

PMPBOK6项目管理五大过程组

版权声明:欢迎交流,菲宇运维!

16310
来自专栏科技分享

以太网PHY寄存器分析【转】

转自:https://blog.csdn.net/Firefly_cjd/article/details/79825869

23420
来自专栏TKE

TKE操作指南 - wordpress 容器监控讲解(十五)

良好的监控环境为腾讯云容器服务高可靠性、高可用性和高性能提供重要保证。您可以方便为不同资源收集不同维度的监控数据,能方便掌握资源的使用状况,轻松定位故障。 腾讯...

15850

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励