1.超链接
<ul>
<li>
<%--浏览器 可以打开图片文件的 ,直接显示 没有下载--%>
<a href="/mvc/imgs/a1.jpg">图片</a>
</li>
<li>
<a href="/mvc/imgs/test1.xlsx">excel</a>
</li>
<li>
<a href="/mvc/imgs/test2.pdf">pdf</a>
</li>
<li>
<a href="/mvc/imgs/test3.rar">压缩包</a>
</li>
<li>
<a href="/mvc/imgs/test4.docx">word</a>
</li>
</ul>
2.流下载
方式1
@GetMapping("/download")
public ResponseEntity<byte[]> download1(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
//获取真实路径
//获取 文件存储的路径
String realPath = request.getServletContext().getRealPath("/imgs/");
//下载的文件的全路径
String allPath = realPath + filename;
FileInputStream inputStream = new FileInputStream(allPath);
//获取流数组
byte[] bytes = new byte[inputStream.available()];
//读取流
inputStream.read(bytes);
//设置下载的文件名
String newFileName = RandomUtil.getFileName(filename);
//设置头信息
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", URLEncoder.encode(newFileName,"utf-8"));
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(bytes,headers, HttpStatus.OK);
return responseEntity;
}
方式2
@GetMapping("/download2")
public void download2(String filename, HttpServletRequest request, HttpServletResponse response) throws IOException {
//获取 文件存储的路径
String realPath = request.getServletContext().getRealPath("/imgs/");
//下载的文件的全路径
String allPath = realPath + filename;
//获取流信息
try(FileInputStream fileInputStream = new FileInputStream(allPath)){
//设置 响应的头信息 分号不能错
response.setHeader("content-disposition","attachment;filename="+RandomUtil.getFileName(filename));
//写给客户端
//把 fileInputStream的流信息 复制给 response的输出流
//只要把流的信息 给 response.getOutputStream() 就会触发浏览器的下载
IOUtils.copy(fileInputStream,response.getOutputStream());
}
}