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<Resource>. Issue: SPR-16376
This commit is contained in:
parent
aea6bb6357
commit
283811b16b
|
@ -252,8 +252,17 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter<MultiValueM
|
|||
resolvableType = ResolvableType.forClass(body.getClass());
|
||||
}
|
||||
|
||||
String filename = (body instanceof Resource ? ((Resource) body).getFilename() : null);
|
||||
outputMessage.getHeaders().setContentDispositionFormData(name, filename);
|
||||
if (body instanceof Resource) {
|
||||
outputMessage.getHeaders().setContentDispositionFormData(name, ((Resource) body).getFilename());
|
||||
}
|
||||
else if (Resource.class.equals(resolvableType.getRawClass())) {
|
||||
body = (T) Mono.from((Publisher<?>) body).doOnNext(o -> {
|
||||
outputMessage.getHeaders().setContentDispositionFormData(name, ((Resource) o).getFilename());
|
||||
});
|
||||
}
|
||||
else {
|
||||
outputMessage.getHeaders().setContentDispositionFormData(name, null);
|
||||
}
|
||||
|
||||
MediaType contentType = outputMessage.getHeaders().getContentType();
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue