【发布时间】:2020-07-28 11:04:47
【问题描述】:
我正在尝试从普通的 HttpPost 方法迁移到 Spring WebClient,并且我有一个 API 可以接受两个文件(一个 JSON 和一个 PDF)进行上传。
我正在尝试发送如下文件,但收到 500 Internal Server Error 而不是 200 OK。
String jsonData ="";
ByteArrayOutputStream file;
MultipartBodyBuilder builder = new MultipartBodyBuilder();
String header1 = String.format("form-data; name=%s; filename=%s", "attach", "file.pdf");
String header2 = String.format("form-data; name=%s; filename=%s", "jsonfile", "jsonfile.json");
// This line is causing the problem, Am I making a mistake here?
builder.part("attach", file.toByteArray()).header("Content-Disposition", header1);
// This line works fine.
builder.part("jsonfile", jsonData.getBytes()).header("Content-Disposition", header2);
WebClient webClient = WebClient.create("a url");
byte[] fileContent = null;
try {
fileContent = webClient.post()
.body(BodyInserters.fromMultipartData(builder.build()))
.retrieve()
.onStatus(HttpStatus::isError, res -> handleError(res))
.bodyToMono(byte[].class)
.block();
} catch (Exception e) {
return null;
}
但是,如果我不在请求中发送 PDF 文件,它只适用于 JSON 文件。 使用 Postman 两种情况都可以正常工作。
我认为我在将 PDF 文件添加到请求时出错了。 虽然文件本身是有效的 PDF,但 API 的响应是 JSON 文件。
如果有人能告诉我这里可能出了什么问题。
【问题讨论】:
-
stackoverflow.com/a/60665396中有一个涵盖完全反应式和非阻塞式多部分文件上传的答案
标签: java spring upload spring-webclient