Отправить полученный весенний FilePart без сохранения - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно отправить FilePart, полученный в RestController, в API с помощью WebClient, как я могу это сделать?

Нашел пример, который сохраняет образ на диск.

    private static String UPLOAD_ROOT = "C:\\pics\\";

public Mono<Void> checkInTest(@RequestPart("photo") Flux<FilePart> photoParts,
                              @RequestPart("data") CheckInParams params, Principal principal) {
    return saveFileToDisk(photoParts);
}

private Mono<Void> saveFileToDisk(Flux<FilePart> parts) {
    return parts
            .log("createImage-files")
            .flatMap(file -> {
                Mono<Void> copyFile = Mono.just(Paths.get(UPLOAD_ROOT, file.filename()).toFile())
                        .log("createImage-picktarget")
                        .map(destFile -> {
                            try {
                                destFile.createNewFile();
                                return destFile;
                            } catch (IOException e) {
                                throw new RuntimeException(e);
                            }
                        })
                        .log("createImage-newfile")
                        .flatMap(file::transferTo)
                        .log("createImage-copy");

                return Mono.when(copyFile)
                        .log("createImage-when");
            })
            .log("createImage-flatMap")
            .then()
            .log("createImage-done");
}

Затем прочитайте егоеще раз и отправить на сервер anoter

.map(destFile -> {
                            MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
                            try {
                                map.set("multipartFile", new ByteArrayResource(FileUtils.readFileToByteArray(destFile)));
                            } catch (IOException ignored) {
                            }
                            map.set("fileName", "test.txt");
                            WebClient client = WebClient.builder().baseUrl("http://localhost:8080").build();

                            return client.post()
                                    .uri("/upload")
                                    .contentType(MediaType.MULTIPART_FORM_DATA)
                                    .syncBody(map)
                                    .exchange(); //todo handle errors???
                        }).then()

Есть ли способ избежать сохранения файла?

...