In meinem Fall generiere ich eine Datei bei Bedarf, also muss auch die URL generiert werden.
Bei mir funktioniert das in etwa so:
@RequestMapping(value = "/files/{filename:.+}", method = RequestMethod.GET, produces = "text/csv")
@ResponseBody
public FileSystemResource getFile(@PathVariable String filename) {
String path = dataProvider.getFullPath(filename);
return new FileSystemResource(new File(path));
}
Sehr wichtig ist der Mime-Typ in produces
und auch, dass der Name der Datei Teil des Links ist, also muss man @PathVariable
.
Der HTML-Code sieht so aus:
<a th:href="@{|/dbreport/files/${file_name}|}">Download</a>
Wo ${file_name}
wird von Thymeleaf im Controller generiert und lautet z.B.: result_20200225.csv, so dass die gesamte Url hinter dem Link lautet: example.com/aplication/dbreport/files/result_20200225.csv
.
Nachdem ich auf den Link geklickt habe, fragt mich der Browser, was ich mit der Datei machen soll - speichern oder öffnen.