Android 使用OKhttp上传格式数据中的图像和音频,并提供BadRequest状态400

Android 使用OKhttp上传格式数据中的图像和音频,并提供BadRequest状态400,android,multipartform-data,okhttp,Android,Multipartform Data,Okhttp,我使用put请求上传图像,并使用Okhttp将其上传到服务器,该请求与邮递员配合良好,但通过android它给了我错误的请求 我已经实现了这里讨论的方法 请帮我整理一下。。。。提前谢谢 public Boolean uploadFile(String serverURL, File file) { OkHttpClient client = new OkHttpClient(); try { RequestBody requestBody = new Mul

我使用put请求上传图像,并使用Okhttp将其上传到服务器,该请求与邮递员配合良好,但通过android它给了我错误的请求 我已经实现了这里讨论的方法

请帮我整理一下。。。。提前谢谢

 public  Boolean uploadFile(String serverURL, File file) {
    OkHttpClient client = new OkHttpClient();
    try {

        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addFormDataPart("file", file.getName(),
                        RequestBody.create(MediaType.parse("image/jpg"), file))
                .addFormDataPart(caseId+"_audio", caseId+"_audio",
                        RequestBody.create(MediaType.parse("audio/*"), Audio))
                .build();

        Request request = new Request.Builder()
                .url(serverURL)
                .put(requestBody)
                .build();

        client.newCall(request).enqueue(new Callback() {

            @Override
            public void onFailure(Request request, IOException e) {
                e.printStackTrace();
                // Handle the error
            }

            @Override
            public void onResponse(Response response) throws IOException {
                if (!response.isSuccessful()) {
                    response.toString();
                    // Handle the error
                }
                // Upload successful
            }
        });
    }catch (Exception ex) {
        ex.printStackTrace();
        // Handle the error
    }
    return false;
}

尝试以下方法重置超时:

OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(60, TimeUnit.SECONDS); 
client.setReadTimeout(60, TimeUnit.SECONDS);

嗯,错误在请求主体中

   RequestBody requestBody = new MultipartBuilder()
            .type(MultipartBuilder.FORM)
            .addFormDataPart("file", file.getName(),
                    RequestBody.create(MediaType.parse("image/jpg"), file))
            .addFormDataPart(caseId+"_audio", caseId+"_audio",
                    RequestBody.create(MediaType.parse("audio/*"), Audio))
            .build();
换了这条线

 .addFormDataPart(caseId+"_audio", caseId+"_audio",
                    RequestBody.create(MediaType.parse("audio/*"), Audio))
            .build();


将日志放在onFailure、onResponse方法的第一个位置,以查看它是否进入该位置。就像Log.i(标记“gotothis”);我调试了代码,在执行了这一行client.newCall(request).enqueue(new Callback(){}之后,它直接返回false。你的意思是当你调用函数uploadFile时它会立即返回false?是的,它会立即返回false。它必须是,因为这段代码是:client.newCall(request).enqueue将异步执行。因此,您必须等待一段时间才能从onFailure或onResponse获得响应。谢谢,但现在我面临错误的请求,请帮助我,请参阅邮递员的附件,这一行。addFormDataPart(“file”,file.getName())应更改为:。addFormDataPart(“imag”,file.getName(),
   .addFormDataPart(caseId+"_audio", Audio.getName(),
                    RequestBody.create(MediaType.parse("audio/*"), Audio))
            .build();