关闭

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

标签: androidokhttp
6410人阅读 评论(2) 收藏 举报
分类:

注:如果移动端排版有问题,请看 简书版 (<-点击左边),希望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使用教程

3
1
查看评论

okhttp,get,post,put,delete 请求

public static String doGet(String url){ //创建一个Request final Request request = new Request.Builder() .url(url) ...
  • u013802160
  • u013802160
  • 2016-07-08 14:15
  • 6580

okHttp3自用封装

okHttp都已经出到3.2.0了,现在才开始要用到它,感觉自己好low~~ 根据平时自己的习惯,还是自己做一下封装,让代码撸起来更加顺畅一点! okhttp-3.2.0和okio-1.7.0就不多说 首先建一个OkHttpUtils的类 /** * HTTP通讯结构处理器 * */ publ...
  • wwwkp1236
  • wwwkp1236
  • 2016-05-11 15:56
  • 15124

Android okhttp 三种请求方式 get put post

开发中遇到用okhttp 请求获取数据,刚做完一点,过程中遇到过一些坑,不过现在都解决了,再次记录一下,直接上代码:get方式的请求new Thread() { @Override public void run() { ...
  • sinat_32194985
  • sinat_32194985
  • 2017-09-06 14:31
  • 702

OKHttpUtils使用介绍

在上一篇blog的末尾讲到了OKHttp使用时的缺点,和对OKHttp封装的必要性。在github上有很多对OKHttp封装的优秀框架,其首推的就是hongyang大神的OKHttpUtils。关于hongyang大神的OKHttpUtils使用以及源码分析在后面章节再做讲解。这篇blog主要讲解鄙...
  • fightingXia
  • fightingXia
  • 2017-04-29 17:55
  • 5978

Okhttp3上传参数、文件和同时上传

OkHttpClient client=new OkHttpClient(); //一种:参数请求体 FormBody paramsBody=new FormBody.Builder() .add("id",currentPlan.getPlanId()+&qu...
  • qq_24004499
  • qq_24004499
  • 2017-04-11 15:41
  • 4326

OkHttp使用(三)文件上传

基于Http的文件上传,采用表单方式上传文件。          通过“addFormDataPart”可以添加多个上传的文件。 private void uploadMultiFile() {   &...
  • tangxl2008008
  • tangxl2008008
  • 2016-06-28 17:10
  • 22488

OkHttp 3.0之后版本GET、POST请求以及POST上传文件的示例代码

转载请标明出处: http://blog.csdn.net/ming2316780/article/details/51598063 本文出自:【Android_Jerry的博客】首先说一下2.x到3.x关于POST请求的请求体类的改变:在2.x中是 类名是:FormEncodingBuild...
  • ming2316780
  • ming2316780
  • 2016-06-06 20:34
  • 16470

Android网络编程(六)OkHttp3用法全解析

上一篇介绍了OkHttp2.x的用法,这一篇文章我们来对照OkHttp2.x版本来看看,OkHttp3使用起来有那些变化。当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。
  • itachi85
  • itachi85
  • 2016-04-21 12:26
  • 103457

OKHttp3学习笔记-文件上传

用TP5框架写了个上传多个文件的表单 HTML代码:<!DOCTYPE html> <html> <head> <title></title> </head> <body> <form action=...
  • langyw98
  • langyw98
  • 2017-09-01 17:57
  • 382

OkHttp使用+文件的上传+断点续传

普通的http://downloa case R.id.get: HttpManager.getInstance().getRequest(getUri,this); break;//方法的回调 @Override public void onFailure(Call...
  • weixin_37263797
  • weixin_37263797
  • 2017-05-06 17:17
  • 991
    个人资料
    • 访问:306527次
    • 积分:3566
    • 等级:
    • 排名:第10982名
    • 原创:68篇
    • 转载:8篇
    • 译文:3篇
    • 评论:140条
    博客专栏
    文章分类
    最新评论
    样式调整