方式一:
controller
1.要下载的图片地址:request.getServletContext().getRealPath("/upload")
2.下载的文件
@RequestMapping("/download")
public String downLoad(HttpServletRequest request, HttpServletResponse response) throws IOException {
//要下载的图片地址
String upload = request.getServletContext().getRealPath("/upload");
String fileName = "1.png";
//1、设置response 响应头
//设置页面不缓存,清空buffer
response.reset();
//字符编码
response.setCharacterEncoding("utf-8");
//二进制传输数据
response.setContentType("multipart/form-data");
//设置响应头
response.setHeader("Content-Disposition",
"attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
File file = new File(upload, fileName);
//2、 读取文件--输入流
try (FileInputStream fileInputStream = new FileInputStream(file)) {
//3、 写出文件--输出流
try (ServletOutputStream outputStream = response.getOutputStream()) {
int len = 0;
byte[] bytes = new byte[1024];
//4、执行 写出操作
while ((len = fileInputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, len);
outputStream.flush();
}
}
}
return "redirect:/index.html";
}
html
<a href="/download">点击下载</a>
方式二:
@Override
@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
String upload = "E:\\日常代码\\springboot-01-yaml\\src\\main\\resources\\static\\img\\罗德.png";
String substring = upload.substring(upload.lastIndexOf("\\")+1);
resp.setHeader("content-disposition", "attachment;filename="
+ URLEncoder.encode(substring,"UTF-8"));
FileInputStream inputStream = new FileInputStream(upload);
int len = 0;
byte[] buffer = new byte[1024];
ServletOutputStream outputStream = resp.getOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
inputStream.close();
outputStream.close();
}