From 283811b16b3b568230ace382f9d16c1c6b662b7a Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 19 Jan 2018 22:12:53 -0500 Subject: [PATCH] Ensure filename is written Now that SPR-16307 makes it possible to write a part with a Publisher we need to ensure we get the filename correctly when writing with Publisher. Issue: SPR-16376 --- .../codec/multipart/MultipartHttpMessageWriter.java | 13 +++++++++++-- .../multipart/MultipartHttpMessageWriterTests.java | 5 ++--- 2 files changed, 13 insertions(+), 5 deletions(-) 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()); }