Java 11 and Spring Boot 2.5.x here. I understand that I can set up a controller to return the contents of a file like so:
@GetMapping(
value = "/get-image-with-media-type",
produces = MediaType.IMAGE_JPEG_VALUE
)
public @ResponseBody byte[] getImageWithMediaType() throws IOException {
InputStream in = getClass()
.getResourceAsStream("/path/to/some/image.jpg");
return IOUtils.toByteArray(in);
}
But what if I want to control the name of the file that is sent back? For instance, on the server-side the file name might be stored as "image.jpg" but say I want to have it returned as "<userId>-<YYYY-mm-DD>-image.jpg
", where <userId>
is the user ID of the authenticated user making the request, and where <YYYY-mm-DD>
is the date the request is made at?
For instance, if user 123 made the request on 12/10/2021, the file would be downloaded as "123-2021-12-10-image.jpg" and if user 234 made the request on 1/17/2022 it would be downloaded as "234-2022-01-17-image.jpg". Is this possible to control on the Spring/Java/server-side, or is it up to the HTTP client (browser, PostMan, whatever) to decide on the file name?