Ich verwende Spring boot v1.5.3.RELEASE
und jetzt kann ich Dateien normalerweise herunterladen, wenn ich die Erweiterungsdatei nicht enthalten. Wenn ich versuche, Dateien mit den typischen Dateierweiterungen (jpg, jpeg, mp3, mp4 usw.) herunterzuladen, lässt Spring die Anfrage fallen. Ein Beispiel Anfrage könnte sein: localhost:8888/public/file/4.jpg
Spring Boot nicht akzeptiert Dateierweiterungen
Mein Application.java ist:
public class Application extends RepositoryRestMvcConfiguration {
public static void main(String[] args) {
// System.getProperties().put("server.port", 8888);
// System.getProperties().put("spring.thymeleaf.mode", "LEGACYHTML5");
SpringApplication.run(Application.class, args);
}
@Bean
public RepositoryRestConfigurer repositoryRestConfigurer() {
return new RepositoryRestConfigurerAdapter() {
@Override
public void configureRepositoryRestConfiguration(
RepositoryRestConfiguration config) {
config.exposeIdsFor(Noticia.class, file.class, Label.class, Reaction.class);
}
};
}
}
Mein Controller.java Stück Code ist:
@RequestMapping(value = "public/file/{filename}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public FileSystemResource getPublicFileWithSuffix(@PathVariable("filename") String filename) {
System.out.println("filename with suffix sepparated! " + filename);
String id = filename.split(Pattern.quote("."))[0];
file file = fileRepository.findById(Long.parseLong(id));
File f = new File("/srv/Ressaca/locals/" + file.getId() + file.getExtension());
return new FileSystemResource(f);
}
Nach googeln ich gefunden habe, ein Teillösung. Mit dieser Lösung, wenn ich etwas wie localhost:8888/public/file/4.hello
oder localhost:8888/public/file/4.jpj
es funktioniert, aber wenn die Erweiterung ist einige echte Erweiterung wie (jpg, jpeg, mp3, mp4 usw.) der Spring-Boot weiterhin die Anfrage fallen.
-Controller nach googeln:
@RequestMapping(value = "public/file/{filename:.+}", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public FileSystemResource getPublicFile(@PathVariable("filename") String filename) {
System.out.println("filename " + filename);
String id = filename.split(Pattern.quote("."))[0];
file file = fileRepository.findById(Long.parseLong(id));
File f = new File("/srv/Ressaca/locals/" + file.getId() + file.getExtension());
return new FileSystemResource(f);
}
Wie kann ich die "echte Dateien Endung" aktivieren?
Diese helfen könnten: https://stackoverflow.com/questions/40557637/how-to-return-an-image-in-spring-boot-controller-and-serve-like-a-file- System –
Vielen Dank. Ich musste hinzufügen "verbraucht = MediaType.ALL_VALUE" –
Aus irgendeinem Grund berücksichtigt Spring die URL-Dateierweiterung und überschreibt den Wert aus dem Accept-Header mit dem impliziten Medientyp, der von der Erweiterung kommt. (Zumindest habe ich das Debuggen dieses Problems gesehen Frühling 4.3.10.RELEASE.) Zum Beispiel haben Sie '.../file.txt' dann wird es versuchen,' text/plain' zu entsprechen, auch wenn der Kopf akzeptieren ist 'application/json'. Lösung ist, die URL im Browser mit einem trainling '/' zu beenden, wie '.../file.txt /' –