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());
|
resolvableType = ResolvableType.forClass(body.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
String filename = (body instanceof Resource ? ((Resource) body).getFilename() : null);
|
if (body instanceof Resource) {
|
||||||
outputMessage.getHeaders().setContentDispositionFormData(name, filename);
|
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();
|
MediaType contentType = outputMessage.getHeaders().getContentType();
|
||||||
|
|
||||||
|
|
|
@ -170,9 +170,8 @@ public class MultipartHttpMessageWriterTests {
|
||||||
|
|
||||||
Part part = requestParts.getFirst("logo");
|
Part part = requestParts.getFirst("logo");
|
||||||
assertEquals("logo", part.name());
|
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);
|
||||||
// assertTrue(part instanceof FilePart);
|
assertEquals("logo.jpg", ((FilePart) part).filename());
|
||||||
// assertEquals("logo.jpg", ((FilePart) part).filename());
|
|
||||||
assertEquals(MediaType.IMAGE_JPEG, part.headers().getContentType());
|
assertEquals(MediaType.IMAGE_JPEG, part.headers().getContentType());
|
||||||
assertEquals(logo.getFile().length(), part.headers().getContentLength());
|
assertEquals(logo.getFile().length(), part.headers().getContentLength());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue