SpringMVC_day02_7(文件的下载)

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


猜你喜欢

转载自blog.csdn.net/strawberry_uncle/article/details/80669486