[1] 下载的请求数据
用户通过浏览器发起下载请求,服务器在接收到请求后,根据当前请求的用户信息,去 数据库中获取当前用户要下载的资源的文件路径,然后服务器再去其硬盘中读取对应的 文件,将文件响应给浏览器,基于此过程,下载请求的请求数据为:
简单的下载:文件的路径直接作为一个字段存储在用户信息表中
用户的ID。
复杂的下载:数据库中专门有一张表记录要下载的文件资源
用户的ID
要下载的资源ID
[2] 下载的后台实现
-
创建单元方法处理下载请求
-
根据请求获取要下载的资源的流对象
-
读取文件并将资源响应给浏览器
前端
<body>
<h3>SpringMVC的下载</h3>
<hr>
<a href="downFile?filename=aa.jpg">点击下载</a>
</body>
//声明单元方法:处理下载请求
@RequestMapping("downFile")
public void downFile(String filename, HttpServletResponse response, HttpServletRequest request) throws IOException {
//设置下载资源的MIME类型?
//设置响应头,告诉浏览器下载的资源需要存储到客户端的硬盘中,而不是解析打开。
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//1.获取要下载的资源的流对象
//获取文件的绝对路径
String path=request.getServletContext().getRealPath("/upload");
//获取文件的二进制数据
byte[] bytes = FileUtils.readFileToByteArray(new File(path, filename));
//2.响应浏览器
//获取输出流对象
ServletOutputStream outputStream = response.getOutputStream();
//响应资源
outputStream.write(bytes);
}