使用邮递员上传文件有效,但使用 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
上传路径的文档中提到了以下细节:
- Header Content-Type multipart/form-data
- 只有一个多部分元素
- Content-Type 的元素需要是 application/pdf
- 名称必须是“文件”
我想我在我的请求中做了这个列表的每一点 - 那么邮递员请求和我自己的 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");
让它发挥作用。我真的不知道为什么,所以如果有人可以帮助我解决这个问题并给出一些解释,我愿意接受。目前我很高兴,因为它现在可以工作了。
问题
我正在测试系统上使用外部 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
上传路径的文档中提到了以下细节:
- Header Content-Type multipart/form-data
- 只有一个多部分元素
- Content-Type 的元素需要是 application/pdf
- 名称必须是“文件”
我想我在我的请求中做了这个列表的每一点 - 那么邮递员请求和我自己的 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");
让它发挥作用。我真的不知道为什么,所以如果有人可以帮助我解决这个问题并给出一些解释,我愿意接受。目前我很高兴,因为它现在可以工作了。