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

文章介绍了使用Okhttp3通过POST方式上传文件到服务器时,遇到Content-Type设置问题。关键在于在MultipartBody.Builder中设置正确的Content-Type,而非在Header中添加,否则可能导致接口请求超时。解决方案是将Content-Type设置在RequestBody中。

后台的接口请求方式可谓真的是各式各样,只有在不断的使用中累积在不同请求方式下的使用方法方可以满足日常开发需求;
以下则介绍一种通过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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值