android okhttp post get" length required" message with 411 return code

时间:2014-09-07 14:05:42

标签: android okhttp

我试图在我的Android应用程序上使用okhttp lib将PNG文件发送到服务器。服务器返回411代码,响应消息是"需要长度"。 我的代码:

RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addPart(
                        Headers.of("Content-Disposition", "form-data; name=\"sendto\""),
                        RequestBody.create(null, sendtoJsonStr))
                .addPart(
                        Headers.of("Content-Disposition", "form-data; name=\"picture\""),
                        RequestBody.create(MEDIA_TYPE_PNG, new File(filePath)))
                .build();
    long l = requestBody.contentLength();

    Request request = new Request.Builder()
            .url(url)
            .post(requestBody)
            .addHeader("Authorization","Token "+ UserLogin.getInstance().getLoginToken())

            .build();

    Response response = mClient.newCall(request).execute();

我试过使用okhttp lib RequestBody类的contentLength()函数,但是没有用。

任何人都可以帮助我吗?感谢。

2 个答案:

答案 0 :(得分:1)

此问题已在this issue中修复,并已合并为master。您可以等待OkHttp的2.1版本或克隆repo并自己构建2.1-SNAPSHOT JAR。

编辑OkHttp 2.1 is out.

答案 1 :(得分:0)

在这里您创建了一个自定义Request主体,因此您必须覆盖内容长度方法并设置其值,否则内容长度将取为-1。