HttpServletResponse实现简单的文件下载功能

1、实现下载功能大致需要以下几个步骤:

  1. 获取到文件所在路径
  2. 获取文件名
  3. 设置浏览器的响应头,确保浏览器是下载文件,而不是解析文件
  4. 创建文件的输入流
  5. 创建缓冲区
  6. 获取servlet输出流
  7. 将输入流写入输出流中

2、具体逻辑代码如下

  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //实现下载功能所需要的步骤:
        //1.获取文件所在路径
        String path = "D:\\ProgramFiles\\apache-tomcat-9.0.37\\webapps\\r1\\WEB-INF\\classes\\1.jfif";
        System.out.println(path);
        //2.获取文件名
        String filename = path.substring(path.lastIndexOf('\\') + 1);
        System.out.println(filename);
        //3.设置浏览器支持我们下载的东西
        resp.setHeader("content-disposition", "attachment;filename=" + filename);
        //4.获取下载文件的输入流
        FileInputStream in = new FileInputStream(path);
        //5.创建缓冲区
        int len = 0;
        byte[] buffer = new byte[1024];
        //6.获取输出流对象
        OutputStream out = resp.getOutputStream();
        //7.将读取的流写入buffer缓冲区中,并通过输出流输出
        while((len = in.read(buffer)) > 0){
            out.write(buffer,0, len);
        }
    }

3、要点

  1. 设置浏览器的响应头,只有设置了该属性浏览器才不会直接解析他能解析的文件,而是我们想要的下载。
    resp.setHeader("content-disposition", "attachment;filename=" + filename);
  2. 如果你的文件名是中文的,那么仅按上面设置会出现你下载的文件名中文乱码问题。
    resp.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename,"UTF-8"));

    将编码格式设置为UTF-8,是浏览器能够识别的编码格式。

posted @ 2020-08-26 22:36  LIFue  阅读(391)  评论(0)    收藏  举报