【发布时间】:2018-04-22 10:07:25
【问题描述】:
我正在尝试使用 Spring Reactive WebClient 将文件上传到 spring 控制器。控制器非常简单,看起来像这样:
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<String> uploadFile(
@RequestParam("multipartFile") MultipartFile multipartFile,
@RequestParam Map<String, Object> entityRequest
) {
entityRequest.entrySet().forEach(System.out::println);
System.out.println(multipartFile);
return ResponseEntity.ok("OK");
}
当我将此控制器与 cURL 一起使用时,一切正常
curl -X POST http://localhost:8080/upload -H 'content-type: multipart/form-data;' -F fileName=test.txt -F randomKey=randomValue -F multipartFile=@document.pdf
multipartFile 进入正确的参数,其他参数进入 Map。
当我尝试从 WebClient 执行相同操作时,我被卡住了。我的代码如下所示:
WebClient client = WebClient.builder().baseUrl("http://localhost:8080").build();
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
map.set("multipartFile", new ByteArrayResource(Files.readAllBytes(Paths.get("/path/to/my/document.pdf"))));
map.set("fileName", "test.txt");
map.set("randomKey", "randomValue");
String result = client.post()
.uri("/upload")
.contentType(MediaType.MULTIPART_FORM_DATA)
.syncBody(map)
.exchange()
.flatMap(response -> response.bodyToMono(String.class))
.flux()
.blockFirst();
System.out.println("RESULT: " + result);
这会导致 400 错误
{
"timestamp":1510228507230,
"status":400,
"error":"Bad Request",
"message":"Required request part 'multipartFile' is not present",
"path":"/upload"
}
有人知道如何解决这个问题吗?
【问题讨论】:
-
你可以尝试使用@RequestPart for MultipartFile multipartFile
-
我已经这样做了,但这并没有什么不同。我找到了另一个解决方案,我会发布它。
标签: java spring spring-mvc spring-boot spring-webflux