文件下载
1:index.jsp
1. 浏览器特性,对于响应流内容能解析就解析,不能解析就下载.
2. 因为响应Content-Disposition=”inline” 默认值.
3. 文件下载只需要在响应中设置 Content-Disposition=”attachment;filename=xxxx” 告诉浏览器响应流内容需要进行下载,而不需要解析.
3.1 filename=xxxx 下载时文件名
4. 实现文件下载步骤:
4.1 导入apache 两个jar
4.2 编写jsp
<a href="download?filename=123.txt">下载文档</a>
4.3 编写控制器
4.3.1 res.setHeader(“参数名”,”参数值”)
4.3.2 Content-Disposition: 告诉浏览器如何处理响应流
1:index.jsp
<body> <h1>下载文件</h1> <a href="file/123.zip">下载压缩包</a> <a href="file/123.txt">下载文档</a> </body>2:增加静态文件配置
<mvc:resources location="/file/" mapping="/file/**"></mvc:resources>产生现象:ZIP格式的文件,会被默认的下载到本地目录,但是 TXT,PNG等文件,直接会被显示到浏览器页面。
1. 浏览器特性,对于响应流内容能解析就解析,不能解析就下载.
2. 因为响应Content-Disposition=”inline” 默认值.
3. 文件下载只需要在响应中设置 Content-Disposition=”attachment;filename=xxxx” 告诉浏览器响应流内容需要进行下载,而不需要解析.
3.1 filename=xxxx 下载时文件名
4. 实现文件下载步骤:
4.1 导入apache 两个jar
4.2 编写jsp
<a href="download?filename=123.txt">下载文档</a>
4.3 编写控制器
4.3.1 res.setHeader(“参数名”,”参数值”)
4.3.2 Content-Disposition: 告诉浏览器如何处理响应流
4.3.2.1 inline 默认值,能解析就解析,不能解析就下载 4.3.2.2 attachement;filename=xxx 恒下载4.3.3 res.getOutputStream(); 获取字节输出流
4.3.3.1 res.getWriter(); 获取字符输出流.4.3.4 控制器方法返回值为void,不希望跳转.
@Controller public class DemoController { @RequestMapping("download") public void download(String filename,HttpServletRequest req,HttpServletResponse resp) throws IOException{ // 只要下载 就走这个控制器 // 1.修改响应头 resp.setHeader("content-Disposition", "attachment;filename="+filename); // 2.获取文件的绝对路径 String realPath = req.getServletContext().getRealPath("/file");// req.getServletContext():绝对application对象。 获取绝对路径 // 3.获取文件对象 File file = new File(realPath,filename); // 4.开始下载文件 OutputStream out = resp.getOutputStream(); out.write(FileUtils.readFileToByteArray(file));// 读取文件转换成字节数组 out.flush(); out.close(); // 不希望 视图处理器 处理,设置返回值为void; } }