使用邮递员上传文件有效,但使用 Apache HttpClient 失败

File upload with postman works but fails with Apache HttpClient

问题

我正在测试系统上使用外部 REST API。有一个我正在尝试实现的上传路径,我正在使用 Apache HTTPClient。我使用以下邮递员配置进行了尝试,并且效果很好:

上传效果很好。

在 Java

中实施
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPut request = new HttpPut("../upload") // placeholder url, not the real one
    
request.setHeader("Content-type", "multipart/form-data");   
request.setHeader(HttpHeaders.AUTHORIZATION, "HEY I AM A TOKEN");       
    
FileBody fileBody = new FileBody(new File("dummy.pdf"), ContentType.create("application/pdf"));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", fileBody);
request.setEntity(builder.build());
    
CloseableHttpResponse response = httpClient.execute(request);

错误

我总是从其余部分得到特定的错误 api:

File could not have been parsed

上传路径的文档中提到了以下细节:

我想我在我的请求中做了这个列表的每一点 - 那么邮递员请求和我自己的 java http 请求有什么区别?

我错过了什么?

编辑:

与 OkHTTP 相同的代码有效。仍然不知道为什么它不能与 Apache HttpClient 一起使用。

OkHttpClient testClient = new OkHttpClient();
File testfile = new File("dummy.pdf");

RequestBody body = new MultipartBuilder().type(MultipartBuilder.FORM).addFormDataPart("file","dummy.pdf",
RequestBody.create(MediaType.parse("application/pdf"),testfile)).build();

Request testreq = new Request.Builder()
.url("../upload")
.header("Authorization", "HI I AM A TOKEN")
.put(body)
.build();
Response testres = testClient.newCall(testreq).execute();

我不得不删除这一行

request.setHeader("Content-type", "multipart/form-data");   

让它发挥作用。我真的不知道为什么,所以如果有人可以帮助我解决这个问题并给出一些解释,我愿意接受。目前我很高兴,因为它现在可以工作了。