一、业务场景
前端点击按钮、自动下载服务器上存储的某文件;
二、实现方法
2.1 后端部分
1、创建文件对象
2、创建输入流对象
3、对文件进行流读取
4、获取输出流对象写出文件
5、关闭流
漂亮的代码片
// get请求
public void downloadFile(HttpServletRequest req , HttpServletResponse resp) {
String temp = req.getParameter('id');
//select url from xx Where id = #{id}
//此时默认已知文件存储在服务器中的路径
InputStream in = new FileInputStream(url);
resp.reset();
resp.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
byte[] b = new byte[1024];
int len;
try {
while ((len = in.read(b)) != -1)
resp.getOutputStream().write(b, 0, len);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
2.2 前端部分(原生)
1、操作dom对象创建一个a标签
2、操作a标签,为其添加href属性
3、操作刚创建的a标签的点击事件
4、移除a标签(可不做)
漂亮的代码片
// downloadFile
functon downloadFile() {
const a = document.createElement('a')
a.href = '' //这里给上get请求的url
a.download = fileName //这里给保存本地的文件名 (不写这行代码部分浏览器会默认给出原文件名)
a.click()
a.remove()
}