【问题标题】:Spring webflux WebClient post a file to a clientSpring webflux WebClient 将文件发布到客户端
【发布时间】:2019-02-05 19:53:30
【问题描述】:

我试图弄清楚如何编写一种方法来简单地将文件从 webflux 控制器发送到“常规”控制器。

我经常收到一个常见错误,但我尝试过的都没有解决它。

我发送文件的方法:

@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 网关上配置一些东西以允许请求参数进入?

【问题讨论】:

    标签: java aws-lambda spring-webflux


    【解决方案1】:

    这对我来说很有趣。由于我在接收端使用 lambda 函数并使用aws-serverless-java-container-spring,我实际上不得不手动声明MultipartResolver

    我添加后问题中的代码正常工作

    @Bean
    public MultipartResolver multipartResolver() {
        return new CommonsMultipartResolver();
    }
    

    到我的配置。

    也许有人会偶然发现它并发现它很有用。

    【讨论】:

    • 您的解决方案是否适用于大文件上传?
    猜你喜欢
    • 2020-08-27
    • 2018-05-09
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 2019-09-20
    • 2018-10-27
    • 2020-01-15
    • 2018-08-18
    相关资源
    最近更新 更多