通过PUT请求上传多部分/表单数据,不能在okhttp上工作吗?

时间:2014-08-06 02:37:50

标签: java curl okhttp

我不知道这是错误,或者我做错了什么。

以下是我的okhttp请求:

private static final MediaType MEDIA_TYPE_JPEG = MediaType.parse("image/jpeg");

protected void putImage(String path) throws IOException {
    RequestBody requestBody = new MultipartBuilder()
        .type(MultipartBuilder.FORM)
        .addPart(
            Headers.of("Content-Disposition", "form-data; name=\"image\""),
            RequestBody.create(MEDIA_TYPE_JPEG, new File(path)))
        .build();
    Request request = new Request.Builder()
        .url("http://localhost:9090/")
        .put(requestBody)
        .build();
    Timber.d(request.urlString());
    okHttpClient.newCall(request).enqueue(new Callback() {
       @Override public void onFailure(Request request, IOException e) {
           e.printStackTrace();
       }

       @Override public void onResponse(Response response) throws IOException {
           Timber.d(response.body().string());
       }
    });
}

它在the backend code

时出错

我认为它只是后端代码有一个错误,但是,它适用于curl

curl -v -XPUT -include --form asdfasdf=@Photo_20140806_000942.jpg http://localhost:9090/

我的问题:

  1. putImage是否正确并与okhttp对齐?
  2. 我的curl命令是否能够非常智能地运行?
  3. 或者okhttp会做我的后端代码应该处理的额外事情吗?

1 个答案:

答案 0 :(得分:0)

您可能需要指定文件名标头。尝试像这样设置Content-Disposition

Headers.of("Content-Disposition", "form-data; name=\"image\"; filename=\"Photo_20140806_000942.jpg\"")