我该如何将Spring Boot(MVC)中的页面网页请求/请求映射重定向到指向静态文件(例如:.txt,.json,.jpg,.mp4等)?在我的Spring Boot项目中,我只有一个application.properties文件和@Controllers。
当用户在浏览器中发出网页请求时,我希望他们被要求下载文件(而不是像使用.html或.jsp一样尝试呈现页面)。
当用户在浏览器中发出网页请求时,我希望他们被要求下载文件(而不是像使用.html或.jsp一样尝试呈现页面)。
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/myredirect", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public void downloadFile(HttpServletResponse response) {
// Remove this instruction if you wish to disable the download dialog.
response.setHeader("Content-Disposition", "attachment; filename=filename.ext");
// Load your file content as byte.
byte[] fileContent = IOUtils.toByteArray(new ClasspathResource("myfile").getIntputStream());
response.getOutputStream().write(fileContent);
}
另一方面,如果您只想将内容直接映射到静态文件,则可以使用Spring Boot Starter Web的默认public
文件夹。
任何在classpath:/public
中找到的文件都将默认映射到/*
。
public/img/logo.png
中的文件将可从网址 www.mysite.com/img/logo.png
中获取。如果您希望使用自定义 URL,则可以使用请求映射。 - Daniel Lavoie一个示例是:类似于redirect:/myapp/some/resource的逻辑视图名称将相对于当前Servlet上下文进行重定向,而类似于redirect:http://myhost.com/some/arbitrary/path的名称将重定向到绝对URL。
@RequestMapping("/redirectToResource")
protected String redirect(@RequestParameter("resource") String resource) {
return "redirect:/myapp/some/" + resource;
}
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };