我试图弄清楚如何编写一种方法来简单地将文件从 webflux Controller 发送到“常规” Controller 。
我不断收到常见错误,但我尝试过的方法都无法解决该问题。
我发送文件的方法:
@GetMapping("process")
public Flux<String> process() throws MalformedURLException {
final UrlResource resource = new UrlResource("file:/tmp/document.pdf");
MultiValueMap<String, UrlResource> data = new LinkedMultiValueMap<>();
data.add("file", resource);
return webClient.post()
.uri(LAMBDA_ENDPOINT)
.contentType(MediaType.MULTIPART_FORM_DATA)
.body(BodyInserters.fromMultipartData(data))
.exchange()
.flatMap(response -> response.bodyToMono(String.class))
.flux();
}
我在具有以下端点的 AWS Lambda 中使用它:
@PostMapping(path = "/input", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<List<?>> input(@RequestParam("file") MultipartFile file) throws IOException {
final ByteBuffer byteBuffer = ByteBuffer.wrap(file.getBytes());
//[..]
return new ResponseEntity<>(result, HttpStatus.OK);
}
但我不断地得到:
{
"timestamp":1549395273838,
"status":400,
"error":"Bad Request",
"message":"Required request part 'file' is not present",
"path":"/detect-face"
}
从 lambda 返回;
我是否只是错误地设置了文件的发送,或者我是否需要在 API 网关上配置某些内容以允许请求参数进入?
最佳答案
这对我来说很有趣。由于我在接收端使用 lambda 函数,并使用 aws-serverless-java-container-spring
,我实际上必须手动声明 MultipartResolver
。
添加后,我的问题中的代码可以正常工作
@Bean
public MultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
我的配置。
也许有人会偶然发现它并发现它很有用。
关于java - Spring webflux WebClient 将文件发布到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54542056/