我正在使用Spring boot v1.5.3.RELEASE
,现在,如果我没有包含扩展文件,我可以正常下载文件。当我尝试使用典型的文件扩展名(jpg,jpeg,mp3,mp4等)下载文件时,Spring会删除请求。示例请求可以是:localhost:8888/public/file/4.jpg
我的 Application.java 是:
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);
}
};
}
}
我的 Controller.java 代码是:
@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);
}
谷歌搜索后我找到了部分解决方案。使用此解决方案,如果我键入一些像localhost:8888/public/file/4.hello
或localhost:8888/public/file/4.jpj
它可以工作,但如果扩展是一些真正的扩展,如(jpg,jpeg,mp3,mp4等),Spring启动继续丢弃请求。
控制器:
@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);
}
如何启用"真实文件扩展名"?
答案 0 :(得分:1)
尝试使用*代替+,但任何事都应该有用。在任何版本的Spring Boot中,我都没有发现任何限制从查询参数发送扩展。
@RequestMapping("/public/file/{fileName:.*}")