通过Okhttp3 post方式上传文件 Content-Type=multipart/form-data

后台的接口请求方式可谓真的是各式各样,只有在不断的使用中累积在不同请求方式下的使用方法方可以满足日常开发需求;
以下则介绍一种通过Okhttp3 post方式上传文件的方式,其中需要格外注意的就是
Content-Type=multipart/form-data!
Content-Type=multipart/form-data!
Content-Type=multipart/form-data!
重要的事情说三遍;

首先是需要载入Okhttp3 库,也算是非常常用的库了

implementation 'com.squareup.okhttp3:okhttp:3.10.0'

使用过程中也有一些疑惑,供大家一起讨论:

void subimt(String filePath, String fileName) {
        OkHttpClient client = new OkHttpClient();
        File file = new File(filePath);
        RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpeg"), file);//将file转换成RequestBody文件

        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MediaType.parse("multipart/form-data; boundary=----WebKitFormBoundaryQC7A2hAquBA4IaJA"))//注意!需要在此处添加Content-Type
                .addFormDataPart("File", fileName, fileBody)
                .addFormDataPart("Name", "value")

                .build();
        Request request = new Request.Builder()
                .url("url")
//                .addHeader("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryQC7A2hAquBA4IaJA")//试着屏蔽此段代码,因为感觉无效,依旧会导致接口请求超时
                .post(requestBody)
                .build();
        Log.d("上传图片测试", request.url().toString());
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d("上传图片测试", "onFailure: " + e.toString());
                runOnUiThread(new Runnable() {//
                    @Override
                    public void run() {
                        Toast("上传失败");
                    }
                });

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Log.d("上传测试", "onResponse: " + response.body().string());
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast("上传成功");
                    }
                });

            }
        });
    }

其中困扰我一段时间的就是为何在“Header”里面添加“Content-Type”好似无效一样,后台并不能接收到数据,接口一直是超时的状态,有懂的朋友可以解下惑,也是在海搜答案的时候看到可以在RequestBody设置“Content-Type”才得以解决;

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Okhttp进行文件上传时,需要注意设置请求头的Content-Typemultipart/form-data。这是因为在文件上传时,需要将文件数据以多部分的形式进行传输。\[1\]你可以使用Okhttp3库来实现这个功能。首先,你需要引入Okhttp3的jar包,可以通过在pom.xml文件中添加以下依赖来引入Okhttp3库: ```xml <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.0.0</version> </dependency> ``` 接下来,你可以使用Okhttp3的RequestBody类来创建一个请求体,然后将文件数据添加到请求体中。在创建RequestBody时,你需要指定Content-Typemultipart/form-data。这样后台才能正确解析请求并接收到数据。\[2\]如果你在设置请求头的Content-Type后仍然无法成功上传文件,可能是因为你没有正确设置RequestBody的Content-Type。你可以尝试在创建RequestBody时设置Content-Typemultipart/form-data,这样可以确保请求体的Content-Type与请求头中的Content-Type一致,从而解决上传文件的问题。\[3\] #### 引用[.reference_title] - *1* *3* [通过Okhttp3 post方式上传文件 Content-Type=multipart/form-data](https://blog.csdn.net/qq_15327175/article/details/130533804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [SpringBoot2.1.x,okhttp3网络请求之MultipartFile方式上传文件multipart/form-data表单多文件+多参数](https://blog.csdn.net/p812438109/article/details/107943319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值