diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 8f024f7602..7cca83a781 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -252,8 +252,17 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter) body).doOnNext(o -> { + outputMessage.getHeaders().setContentDispositionFormData(name, ((Resource) o).getFilename()); + }); + } + else { + outputMessage.getHeaders().setContentDispositionFormData(name, null); + } MediaType contentType = outputMessage.getHeaders().getContentType(); diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java index 81594d3e2d..d6db8d2ffa 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriterTests.java @@ -170,9 +170,8 @@ public class MultipartHttpMessageWriterTests { Part part = requestParts.getFirst("logo"); assertEquals("logo", part.name()); -// TODO: a Resource written as an async part doesn't have a file name in the contentDisposition -// assertTrue(part instanceof FilePart); -// assertEquals("logo.jpg", ((FilePart) part).filename()); + assertTrue(part instanceof FilePart); + assertEquals("logo.jpg", ((FilePart) part).filename()); assertEquals(MediaType.IMAGE_JPEG, part.headers().getContentType()); assertEquals(logo.getFile().length(), part.headers().getContentLength()); }