文件下载
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;
}
}

被折叠的 条评论
为什么被折叠?



