Spring Webflux WebClient опубликовать файл для клиента - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь выяснить, как написать метод для простой отправки файла с контроллера 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"
}

назад от лямбды;

Я просто неправильно настроил отправку файла, или мне нужно что-то настроить на API-шлюзе, чтобы разрешитьпараметры запроса в?

1 Ответ

0 голосов
/ 06 февраля 2019

Это было интересно для меня.Поскольку я использую лямбда-функцию на принимающей стороне и использую aws-serverless-java-container-spring, мне фактически пришлось объявить MultipartResolver вручную.

Код в моем вопросе работал правильно, как только я добавил

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

в мою конфигурацию.

Может быть, кто-то наткнется на это и сочтет это полезным.

...