web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse;
- 如果要获取我们客户端请求过来的参数:找HttpServlectrequest
- 如果要给客户端响应一些信息:找HttpServlectResponse
- 获取文件的路径
- 下载文件的名称
- 想办法让浏览器支持下载我们需要的东西,中文文件名UREcoder,encode编码,否则有可能出现乱码
- 获取文件的输入流
- 创建缓冲区
- 获取OutputStream对象
- 将FileOutputStream流写入buffer缓冲区
public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //要获取下载文件的路径 ServletContext context = this.getServletContext(); String realPath = "E:\\IntelliJ IDEA 2020.1.1\\com.zang\\response\\src\\main\\resources\\1.png"; //下载的文件名是啥 String substring = realPath.substring(realPath.lastIndexOf("\\")+1); //设置想办法让浏览器能够支持下载 我们需要的东西,中文文件名UREcoder,encode编码,否则有可能出现乱码 resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(realPath,"UTF-8")); //获取下载文件的输入流 FileInputStream is = new FileInputStream(realPath); //创建缓冲区 int len=0; byte[] buffer = new byte[1024]; //获取OutPuTStream对象 ServletOutputStream os = resp.getOutputStream(); //将FileOutputStream对象写入到缓冲区 while ((len=is.read(buffer))!=0){ os.write(buffer,0,len); } //使用OutputStream将缓冲区中的数据写入到客户端 is.close(); os.close(); }