1. 要获取下载文件的路径
  2. 获取下载文件的文件名
  3. 让浏览器能够支持我们要下载的东文件
  4. 获取下载文件的输入流
  5. 创建缓冲区
  6. 获取OutputStream对象
  7. 将FileOutputStream写入到缓冲区,再使用OutputStream将缓冲区的数据输出到客户端

文件目录结构
webapp目录下新建static文件夹,将图片放在static

在这里插入图片描述

新建一个FileDownload类,继承于HttpServlet

package com.tsingby;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;

public class FileDownload extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    	// 要获取下载文件的路径
        String picturePath = this.getServletContext().getRealPath("/static/picture.png");
      	//获取文件名
        String pictureName = picturePath.substring(picturePath.lastIndexOf("\\") + 1);
        //设置消息头
        resp.setHeader("Content-Disposition","attachment;filename"+pictureName);
        //获取下载文件的输入流
        FileInputStream fis=new FileInputStream(picturePath);
//        创建缓冲区
        int len=0;
        byte[] buffer = new byte[1024];
//        获取ServletOutputStream对象
        ServletOutputStream out = resp.getOutputStream();
//        将FileOutputStream对象写入buffer,使用OutputStream将缓冲区的数据输出到客户端
        while ((len=fis.read(buffer))>0){
            out.write(buffer,0,len);
        }
        out.close();
        fis.close();
    }
}

注册Servlet

  <servlet>
        <servlet-name>FileDownload</servlet-name>
        <servlet-class>com.tsingby.FileDownload</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FileDownload</servlet-name>
        <url-pattern>/down</url-pattern>
    </servlet-mapping>

启动tomcat,在浏览器地址栏后追加/down,摁下回车,即可完成下载

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐