Java 如何在Spring Boot中将页面重定向到静态文件?
如何在Spring Boot(MVC)中重定向页面web请求/请求映射以指向静态文件(例如:.txt、.json、.jpg、.mp4等)。我的Spring启动项目中只有一个application.properties文件和@ControllersJava 如何在Spring Boot中将页面重定向到静态文件?,java,spring-mvc,spring-boot,Java,Spring Mvc,Spring Boot,如何在Spring Boot(MVC)中重定向页面web请求/请求映射以指向静态文件(例如:.txt、.json、.jpg、.mp4等)。我的Spring启动项目中只有一个application.properties文件和@Controllers 我希望用户在向浏览器中的url发出web请求时,被要求下载文件(不要像.html、.jsp那样使用它来尝试呈现页面)您可以通过告诉响应您希望附加一个可下载的文件来实现这一点。然后你可以简单地写下你想要下载的内容 以下是一个例子: @ResponseSt
我希望用户在向浏览器中的url发出web请求时,被要求下载文件(不要像.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
文件夹
默认情况下,在
类路径:/public中找到的任何文件都将映射到/*
。您可以在Spring中使用“redirect:”前缀重定向。从:
诸如redirect:/myapp/some/resource之类的逻辑视图名称将相对于当前Servlet上下文重定向,而诸如redirect:之类的名称将重定向到绝对URL
例如:
@RequestMapping("/redirectToResource")
protected String redirect(@RequestParameter("resource") String resource) {
return "redirect:/myapp/some/" + resource;
}
您可以将要直接服务的静态资源放置在类路径中的以下任意位置(请参阅):
当用户单击链接时下载文件?你指的是重定向到静态文件吗?谢谢Daniel。我有个问题。现在,我可以通过根路径(例如:www.mysite.com/myfile.txt)访问我的静态文件,但我希望能够在类似(www.mysite.com/myredirect)的位置访问相同的文件。。。。如何配置项目以将请求映射到静态文件?您好,我已经更新了我的代码片段以回答您的问题。您需要从RequestMapping值定义重定向url。然后从类路径或绝对路径以字节数组的形式加载文件。如你所愿。祝你好运如果您希望删除下载行为,只需删除setHeader snipper。谢谢!我要试试这个!我又读了一遍你的评论,我想你不知道你的类路径的公共文件夹中的任何可用资源都可以从根路径获得。例如:public/img/logo.png
中的文件可从urlwww.mysite.com/img/logo.png
获得。如果您喜欢自定义URL,那么请求映射就是一种方式。如果我错了,请纠正我,但使用“重定向:”将导致重写最终用户访问的URL。我不确定这种行为是否可取。它还限制为已经作为静态资源可用的资源提供服务。是的,它会导致浏览器重定向。要动态加载文件,您可以始终将@RequestParameter作为方法参数。是的,Spring Boot将该文件用作静态资源。
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };