java.net.ProtocolException:当我通过okhttp将一个映像上载到服务器时,发生了意外的流结束

java.net.ProtocolException:当我通过okhttp将一个映像上载到服务器时,发生了意外的流结束,java,android,image,upload,okhttp,Java,Android,Image,Upload,Okhttp,当我将一个115KB的图像文件上传到服务器时发生了错误。(stackoverflow的大部分答案是关于下载该文件。我不知道它是否与那些相同) 错误信息如下: onFailure:java.net.ProtocolException:意外的流结束 相关代码: public void upLoadImageFile(String uploadUrl, File file, Map<String, String> maps, final HWUploadListener listener)

当我将一个115KB的图像文件上传到服务器时发生了错误。(stackoverflow的大部分答案是关于下载该文件。我不知道它是否与那些相同) 错误信息如下: onFailure:java.net.ProtocolException:意外的流结束

相关代码:

public void upLoadImageFile(String uploadUrl, File file, Map<String, String> maps, final HWUploadListener listener) {


    final CallbackHandler handler = new CallbackHandler(listener);

    try {
        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
        if (maps == null) {
            builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"image\";filename=\"file.jpg\""),
                    RequestBody.create(MediaType.parse("image/jpeg"), file)).build();

        } else {
            for (String key : maps.keySet()) {
                builder.addFormDataPart(key, maps.get(key));
            }
            builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"image\";filename=" + file.getName()), RequestBody.create(MediaType.parse("image/jpeg"), file)
            );
        }


        RequestBody body = builder.build();

        final Request request = new Request.Builder().url(uploadUrl).post(body).build();

        final Call call = mOkHttpClient.newBuilder().writeTimeout(50, TimeUnit.SECONDS).build().newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                UtilUtils1.log("HuowuSdk", "onFailure :" + e.toString());
                handler.uploadFailure(e.toString());
            }

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

                if (response.isSuccessful()) {
                    String result = response.body().string();
                    handler.uploadSuccess(result);

                } else {
                    handler.uploadFailure(response.message());
                }
            }
        });

    } catch (Exception e) {
        UtilUtils1.log("HuowuSdk", e.toString());
        handler.uploadError(e.toString());
    }
}
public void upLoadImageFile(字符串uploadUrl、文件文件、映射、最终HWUploadListener侦听器){
final CallbackHandler=新的CallbackHandler(侦听器);
试一试{
MultipartBody.Builder=new MultipartBody.Builder().setType(MultipartBody.FORM);
如果(映射==null){
builder.addPart(Headers.of(“内容处置”,“表单数据;名称=\”图像\“;文件名=\”文件.jpg\”),
create(MediaType.parse(“image/jpeg”),file)).build();
}否则{
for(字符串键:maps.keySet()){
builder.addFormDataPart(key,maps.get(key));
}
builder.addPart(Headers.of(“内容处置”,“表单数据;名称=\”图像\“filename=“+file.getName()”),RequestBody.create(MediaType.parse(“image/jpeg”),文件)
);
}
RequestBody=builder.build();
最终请求=new Request.Builder().url(uploadUrl).post(body.build();
最终调用=mOkHttpClient.newBuilder().writeTimeout(50,TimeUnit.SECONDS).build().newCall(请求);
call.enqueue(新回调(){
@凌驾
公共void onFailure(调用调用,IOE异常){
日志(“HuowuSdk”,“onFailure:+e.toString());
handler.uploadFailure(例如toString());
}
@凌驾
public void onResponse(调用调用、响应响应)引发IOException{
if(response.issusccessful()){
字符串结果=response.body().String();
handler.uploadSuccess(结果);
}否则{
handler.uploadFailure(response.message());
}
}
});
}捕获(例外e){
UtilUtils1.log(“HuowuSdk”,e.toString());
handler.uploadError(例如toString());
}
}

谢谢你的回答

在下面这一行中,您必须增加写入超时,因为上载时写入超时过期,这可能是下面这一行中增加写入超时限制的原因:

final Call call = mOkHttpClient.newBuilder().writeTimeout(50, TimeUnit.SECONDS).build().newCall(request);

在下面这一行中,您必须增加写入超时,因为上载时写入超时过期,这可能是下面这一行中增加写入超时限制的原因:

final Call call = mOkHttpClient.newBuilder().writeTimeout(50, TimeUnit.SECONDS).build().newCall(request);

谢谢你的回答。但是我在那之前写了超时限制。问题仍然发生。谢谢你的回答。但是我在那之前写了超时限制。问题仍然发生。