美文网首页
OkHttp3/Retrofit上传单个文件

OkHttp3/Retrofit上传单个文件

作者: 王魔王 | 来源:发表于2019-11-14 17:18 被阅读0次

OkHttp也好,Retrofit也罢,上传文件的本质都是要把上传的文件放入Http协议的请求体中,只不过不同的网络框架有不同的写法而已

接下来以本公司的接口示例讲解怎么使用OkHttp上传单文件


接口文档

上传文件的所谓的难点在于对于请求体的构建,那么OkHttp构建文件表单请求体的模板代码如下:

      //filePath为文件的绝对路径,这里注意权限问题
       File file = new File(filePath);
        if (!file.exists()) {
            log.d("找不到该文件");
            return;
        }
        RequestBody requestBody= null;
        //声明请求体的类型为文件表单类型
        MediaType mediaType = MediaType.parse("multipart/form-data");
        //通过静态方法创建请求体
        //file为要上传的文件,mediaType为上一步中 声明的请求体类型
        requestBody = RequestBody.create(file, mediaType);
         //创建文件表单的请求体,把文件请求体、文本参数放入表单中
        MultipartBody multipartBody = new MultipartBody.Builder()
                 .addFormDataPart("file",file.getName(),requestBody)
                  .addFormDataPart("content","这个是描述内容")
                 .build();
        Request request = new Request.Builder().url("http://xxxxxxxxxx")
                .post(multipartBody)//post方式提交表单
                .build();

         //创建请求任务
        Call call = OkhttpManager.getInstance().getOkHttpClient().newCall(request);
        //执行异步请求任务
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {

          
            }
        });

接下来是使用Retrofit上传单个文件

由于Retrofit只是对网络请求做了一次包装,所以Retrofit的上传单个文件的方式跟OkHttp几乎一模一样
1、接口定义


 @POST("http://xxxxxxx")
 @Multipart
Observable<UpHeadReseponse> upHead(@Part("image") MultipartBody multipartBody,@Part("content") String content);

参数解释:
@POST:post方式请求
@Multipart:文件表单提交
@Part("image") MultipartBody body:形参为 image,实参为MultipartBody,这个MultipartBody是OkHttp的(有没有觉得很奇怪)
@Part("content")形参为content,实参为String,这个参数是接口文档中要求的另外一个参数
使用方式如下

 //filePath为文件的绝对路径,这里注意权限问题
       File file = new File(filePath);
        if (!file.exists()) {
            log.d("找不到该文件");
            return;
        }
        RequestBody requestBody= null;
        //声明请求体的类型为文件表单类型
        MediaType mediaType = MediaType.parse("multipart/form-data");
        //通过静态方法创建请求体
        //file为要上传的文件,mediaType为上一步中 声明的请求体类型
        requestBody = RequestBody.create(file, mediaType);
         //创建文件表单的请求体,把文件请求体、文本参数放入表单中
        MultipartBody multipartBody = new MultipartBody.Builder()
                 .addFormDataPart("file",file.getName(),requestBody)
                  .addFormDataPart("content","这个是描述内容")
                 .build();
 //通过工具类初始化Retrofit
        Retrofit retrofit = RetrofitUtil.getInstance().getRetrofit();
        //创建接口的实例
        ApiService apiService = retrofit.create(ApiService.class);
        //调用方法
        Observable<UpHeadReseponse> observable = apiService.upHead(multipartBody,"这个是描述");
        // TODO: 2019/11/15 接下来就是使用observable发起请求了 ,如果你不会,我建议你出门左转先看看retrofit怎么使用

**注释写的已经够详细的了,这段模板代码足以支撑上传单个文件**
现在再回过头来看本文中开头的那一句话:OkHttp也好,Retrofit也罢,上传文件的本质都是要把上传的文件放入Http协议的请求体中,只不过不同的网络框架有不同的写法而已
OkHttp与Retrfofit上传单个文件的重点都在于对于请求体的构建,而这两个框架使用了相同的请求体即:MultipartBody,所以重点就集中到了MultipartBody的构建上。
PS:如果在调试过程中发生异常,那么仔细检查:
一、是不是文件过大,超时了
二、是不是没有Sd卡权限
三、别的未知原因😂

相关文章

  • OkHttp3/Retrofit上传单个文件

    OkHttp也好,Retrofit也罢,上传文件的本质都是要把上传的文件放入Http协议的请求体中,只不过不同的网...

  • Retrofit文件上传和文件下载

    项目中使用了Retrofit2 网络框架,对Retrofit的文件上传和下载进行记录。 文件上传 文件上传 一般采...

  • 上传文件

    单文件和多文件上传单文件上传(只能上传单个文件) 多文件上传(可以上传单个,多个使用数组方式) 提交文本信息和文件...

  • SpringBoot文件上传和下载

    这里介绍下SpringBoot中如何接收前台页面上传的文件,以及如何下载文件。 1、单个文件上传 1.1 单个文件...

  • Retrofit2源码解析

    Retrofit网络请求的功能实现是okhttp3,由okhttp3做真正的网络请求。Retrofit2框架和其他...

  • 网络整理(四)——数据上传

    1 POST上传单个文件 重点:1.单个文件上传(四个步骤) 2.设置请求体格式{ } 2 多文件上传 重点:1....

  • Retrofit学习(五)-文件上传

    Retrofit学习(五)-文件上传 Retrofit学习(一)-集成http://www.jianshu.com...

  • Retrofit2源码解析(一)

    本文基于Retrofit2的2.4.0版本 Retrofit2底层基于OkHttp3,是对利用OkHttp3请求网...

  • 使用Retrofit进行文件上传

    使用Retrofit上传文件时需要使用multipart/form-data格式进行上传客户端定义Retrofit...

  • Retrofit2文件上传与下载

    Retrofit2文件上传与下载通俗易懂教程。 之前在使用retrofit的时候,遇到文件上传和下载的功能,搜索了...

网友评论

      本文标题:OkHttp3/Retrofit上传单个文件

      本文链接:https://www.haomeiwen.com/subject/mqnrictx.html