SpringMVC下载文件
来源:互联网 发布:网络英语热词如low 编辑:程序博客网 时间:2024/06/02 05:20
为了将像文件这样的资源发送到浏览器,需要在控制器中完成以下工作:
(1)对请求处理方法使用void返回类型,并在方法中添加HttpServletResponse参数。
(2)将响应的内容类型设为文件的内容类型。Content-Type标题在某个实体的body中定义数据的类型,并包含媒体类型和子类型标识符。
(3)添加一个名为Content-Disposition的HTTP响应标题,并赋值attachment; filename=fileName,这里的fileName是默认文件名,应该出现在File Download(文件下载)对话框中。它通常与文件同名,但是也并非一定如此。
ResourceController
@Controllerpublic class ResourceController { private static final Log logger = LogFactory .getLog(ResourceController.class); @RequestMapping(value = "/login") public String login(@ModelAttribute Login login, HttpSession session, Model model) { model.addAttribute("login", new Login()); if ("paul".equals(login.getUserName()) && "secret".equals(login.getPassword())) { session.setAttribute("loggedIn", Boolean.TRUE); return "Main"; } else { return "LoginForm"; } } @RequestMapping(value = "/resource_download") public String downloadResource(HttpSession session, HttpServletRequest request, HttpServletResponse response) { if (session == null || session.getAttribute("loggedIn") == null) { return "LoginForm"; } String dataDirectory = request.getServletContext().getRealPath( "WEB-INF/data"); File file = new File(dataDirectory, "secret.pdf"); if (file.exists()) { response.setContentType("application/pdf"); response.addHeader("Content-Disposition.pdf", "attachment;filename=secret.pdf"); byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (Exception e2) { } } if(fis!=null){ try { fis.close(); } catch (Exception e2) { } } } } return null; }}
Login
public class Login implements Serializable { private static final long serialVersionUID = -38L; private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
LoginForm.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><html><head><title>Login</title></head><body><div id="global"><form:form commandName="login" action="login" method="post"> <fieldset> <legend>Login</legend> <p> <label for="userName">User Name:</label> <form:input id="userName" path="userName" cssErrorClass="error"/> </p> <p> <label for="password">Password:</label> <form:password id="password" path="password" cssErrorClass="error"/> </p> <p id="buttons"> <input id="reset" type="reset" tabindex="4"> <input id="submit" type="submit" tabindex="5" value="Login"> </p> </fieldset></form:form></div></body></html>
Main.jsp
Main.jsp页面中包含了一个链接,用户可以单击它来下载文件。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><html><head><title>Download Page</title><style type="text/css">@import url("<c:url value='/css/main.css'/>");</style></head><body> <div id="global"> <h4>Please click the link below</h4> <p> <a href="resource_download">Download</a> </p> </div></body></html>
防止交叉引用
配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <context:component-scan base-package="controller2" /> <mvc:annotation-driven /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/*.html" location="/" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean></beans>
imageController
@Controllerpublic class ImageController { private static final Log logger = LogFactory.getLog(ImageController.class); @RequestMapping(value = "/image_get/{id}", method = RequestMethod.GET) public void getImage(@PathVariable String id, HttpServletRequest request, HttpServletResponse response, @RequestHeader String referer) { if (referer != null) { String imageDirectory = request.getServletContext().getRealPath( "/WEB-INF/image"); File file = new File(imageDirectory, id + ".jpg"); if (file.exists()) { response.setContentType("image/jpg"); byte[] buffer = new byte[1024]; FileInputStream fis = null; BufferedInputStream bis = null; try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); OutputStream os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (Exception e2) { } } if(fis!=null){ try { fis.close(); } catch (Exception e2) { } } } } } }}
images,html
<html><head><title>Photo</title></head><body><img src="image_get/1"/><img src="image_get/2"/><img src="image_get/3"/><img src="image_get/4"/><img src="image_get/5"/><img src="image_get/6"/><img src="image_get/7"/><img src="image_get/8"/><img src="image_get/9"/><img src="image_get/10"/></body></html>
阅读全文
0 0
- SpringMVC—文件下载
- SpringMvc下载excel文件
- SpringMvc 通用文件下载
- springMVC 文件下载
- SpringMvc下载excel文件
- springmvc下载文件
- springmvc 文件下载
- springMVC 文件下载
- SpringMvc下载excel文件
- springMVC文件下载
- springMVC下载文件
- SpringMVC文件下载
- SpringMvc下载文件
- SpringMvc 上传/下载 文件
- SpringMVC上传、下载文件
- SpringMVC 实现文件下载
- SpringMVC实现文件下载
- springmvc 下载文件
- ARKit教程推荐
- mysql 两表join与in子查询的比较
- Lucene6之Ansj插件过滤停用词
- Oracle中给表添加删除主外键约束
- pom中属性动态替换resources的占位符
- SpringMVC下载文件
- 快速计算梯度的魔法--反向传播算法
- ActFramework 接口自动绑定
- 1045. 快速排序(25)
- 2D/3D文档查看器ABViewer发布v12,大大提高PDF转DWG的速度丨附下载
- 92. Reverse Linked List II
- Vector (对象要向下转型)
- 深度学习在 iOS 上的实践 —— 通过 YOLO 在 iOS 上实现实时物体检测
- Nginx启动时出现Address already in use 解决方案