1.在intellij中创建web项目
2,配置项目路径
- 在菜单栏上选择Run里面的Edit Configurationt。
- 点击左上角+,拉到下面选择Tomcat Server -->local
- 找到本地的tomcat文件夹,添加进去
- 还是tomcat配置页面,点击上方的Depolyment,将Application context改为**/**。如图所示:
3.在web中新建index.html
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8"/>
<title>文件下载</title>
</head>
<body>
<a href="/downlord?filename=jr0.jpg">图片</a><!--href值为要访问的servlet和传递的文件名称-->
</body>
</html>
4.改变默认启动文件
在web下的WEB-INFO下打开web.xml,添加如下代码
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
5.创建java类,加上WebServlet注解
package servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/downlord")
public class Downlord extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取传递过来的文件名参数
String filename = req.getParameter("filename");
ServletContext servletContext = this.getServletContext();
//通过servletContext获取当前项目在硬盘上的真实路径并将文件在项目中的路径和真实路径拼接字符串,以确定文件的路径
String realPath = servletContext.getRealPath("/img/" + filename);
//获取mime类型
String mimeType = servletContext.getMimeType(filename);
//设置响应头的content-type为文件类型对应的mime类型
resp.setContentType(mimeType);
//设置响应头,以附件形式打开,不然图片类型会在浏览器中直接打开
resp.setHeader("content-disposition", "attachment;filename=" + filename);
//将服务器磁盘上的文件下载到本地客户机
FileInputStream fileInputStream = new FileInputStream(realPath);
byte[] bytes = new byte[1024*8];
int len = fileInputStream.read(bytes);
ServletOutputStream outputStream = resp.getOutputStream();
while (len!=-1) {
outputStream.write(bytes, 0, len);
len=fileInputStream.read(bytes);
}
}
}