第一种方法直接在前端使用超链接,也就是a标签
浏览器不能识别会直接下载(像压缩文件不能直接下载),浏览器能识别,想要下载加一个download属性。download可以不写任何信息。
首先在web下建一个文件,放需要下载的文件

前端代码:

<body>
<a href="download/8SR]W6{XY95QAENBX01XGBD.png">图片文件</a>
<a href="download/111.txt">文本文件</a>
<!--浏览器不能识别的文件-->
<a href="download/111.zip">压缩文件</a>
<hr>
<a href="download/8SR]W6{XY95QAENBX01XGBD.png" download="java.png">图片文件</a>
<a href="download/111.txt" download>文本文件</a>
</body>
</html>
启动后点击页面中的超链接就可以下载。
第二种方式:后台实现下载
1.
需要通过
response.setContentType
方法设置
Content-type
头字段的值, 为浏览器无法使用某
种方式或激活某个程序来处理的
MIME
类型,例 如
"application/octet-stream"
或
"application/x-
msdownload"
等。
2.
需要通过
response.setHeader
方法设置
Content-Disposition
头的值 为
"attachment;filename=
文件名
"
3.
读取下载文件,调用
response.getOutputStream
方法向客户端写入附件内容。
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("-----文件下载-------");
//设置请求的编码格式
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
//获取参数(得到要下载的文件名,前端传来的)
String fileName = request.getParameter("fileName");
//参数的非空判断 trim();去除字符串的前后空格
if(fileName == null || "".equals(fileName.trim())){
response.getWriter().write("请输入要下载的文件名");
response.getWriter().close();
return;
}
//得到图片存放的路径
String path = request.getServletContext().getRealPath("/download/");
//通过路径得到file对象
File file = new File(path + fileName);
if(file.exists() && file.isFile()){
//设置响应类型(浏览器无法使用某种方式或激活某个程序来处理MIME类型)
response.setContentType("application/x-msdownload");
//设置响应头
response.setHeader("Content-Disposition","attachment;filename"+fileName);
//得到file文件输入流
InputStream in = new FileInputStream(file);
//得到字节输出流
ServletOutputStream out = response.getOutputStream();
//定义byte数组
byte[] bytes = new byte[1024];
//定义长度
int len = 0;
//循环输出
while((len = in.read(bytes)) != -1){
//输出
out.write(bytes,0,len);
}
//关闭资源
out.close();
in.close();
}else{
response.getWriter().write("文件不存在,请重试!");
response.getWriter().close();
}
}
}
----------------------------------------------------------------
简化的代码
@WebServlet("/downloadServlet02")
public class DownLoadSimple extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 设置请求的编码
request.setCharacterEncoding("UTF-8");
// 获取文件下载路径
String path = getServletContext().getRealPath("/");
// 获取要下载的文件名
String name = request.getParameter("fileName");
// 通过路径得到file对象
File file = new File(path + name);
// 判断file对象是否存在,且是否是一个标准文件
if (file.exists() && file.isFile()) {
// 设置响应类型 (浏览器无法使用某种方式或激活某个程序来处理的类型)
response.setContentType("application/x-msdownload");
// 设置头信息
response.setHeader("Content-Disposition", "attachment;filename=" + name);
// 得到输入流
InputStream is = new FileInputStream(file);
// 得到输出流
ServletOutputStream os = response.getOutputStream();
// 定义byte数组
byte[] car = new byte[1024];
// 定义长度
int len = 0;
// 循环 输出
while ((len = is.read(car)) != -1) {
os.write(car, 0, len);
}
// 关闭流 释放资源
os.close();
is.close();
} else {
System.out.println("文件不存在,下载失败!");
}
}
}


















