Возможно ли задать заголовок Content-Disposition из Flux <FilePart>в запросе Multipart? - PullRequest
3 голосов
/ 23 мая 2019

Я пытаюсь «пройти» загрузку с контроллера на другой сервер в рамках составного запроса, используя WebClient. Я, наконец, загрузил файл, но у меня возникли проблемы с получением потокового имени файла из FilePart. Я не уверен, что это вообще возможно?

Это фрагмент кода, который вызывает проблему:

private MultiValueMap<String, HttpEntity<?>> getMultipartPayload(Flux<FilePart> fileUploadFlux) {
    MultipartBodyBuilder builder = new MultipartBodyBuilder();

    Flux<DataBuffer> dataBufferFlux = fileUploadFlux.flatMap(Part::content);

    // spring doesn't have an encoder for FilePart, so we must extract the DataBuffer
    builder.asyncPart("file", dataBufferFlux, DataBuffer.class).headers(h -> {
        // need to set content-disposition header
        // but - this doesn't work as the filename is still a flux
        h.setContentDispositionFormData("file", fileUploadFlux.map(FilePart::filename));
    });

    return builder.build();
}

Обратите внимание, что мне пришлось извлечь Flux<DataBuffer> из Flux<FilePart>, поскольку Spring не смог найти автора для FilePart (No suitable writer found for part: file).

Можно ли установить заголовок размещения содержимого таким способом?

...