java - Spring webflux WebClient 将文件发布到客户端

标签 java aws-lambda spring-webflux

我试图弄清楚如何编写一种方法来简单地将文件从 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/

相关文章:

amazon-web-services - 使用相同参数更新 CloudFormation 自定义资源

java - Webflux Webclient 使用不同的 URL 重试

java - 在 TimeoutMainSubscriber 的情况下将 Reactor Context 复制到 MDC

java - 用于 SQLCipher 的 JDBC

node.js - 如何使用 Node JS 连接 Redshift 数据库

java - 如何在java中获得小数点位置的最大数字

python - AWS Lambda TypeError : datetime. datetime(2012, 8, 8, 21, 46, 24, 862000) 不是 JSON 可序列化

java - webflux和reactor的正确使用方法是什么

java - SQLite语法错误(代码1)在Android Studio上返回

Java println 方法错误