zoukankan      html  css  js  c++  java
  • 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使用教程

  • 相关阅读:
    1017 A除以B (20分)**
    剑指 Offer 11. 旋转数组的最小数字(简单)
    剑指 Offer 04. 二维数组中的查找(中等)
    剑指 Offer 53
    剑指 Offer 53
    剑指 Offer 03. 数组中重复的数字(简单)
    剑指 Offer 58
    剑指 Offer 05. 替换空格(简单)
    执行npm install命令出错问题
    剑指 Offer 35. 复杂链表的复制(中等)
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300474.html
Copyright © 2011-2022 走看看