Servlet实现文件下载

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/*
   Servlet实现文件的下载:
      1.需要通过response.setContentType方法设置Content-type头字段的值,为浏览器无法使用某种方式或激活
    某个程序来处理MIME类型,例如"application/octet-stream" 或 "application/x-msdownload"等
      2.需要通过response.setHeader方法设置Content-Disposition头的值为 “attachment;filename=文件名”
      3.读取下载文件,调用response.getOutputStream方法向客户端写入附件内容
 */
@WebServlet("/down")
public class DownloadServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求编码(Tomcat10及以上版本不用设置)
        request.setCharacterEncoding("utf-8");
        // 获取文件的下载路径
        String path = getServletContext().getRealPath("/download/");
        // 获取要下载文件的名称
        String fileName = request.getParameter("fileName");
        // 通过路径得到file对象
        File file = new File(path + fileName);
        // 判断file对象是否存在,且是否是一个标准文件
        if (file.exists() && file.isFile()) {
            // 设置响应类型(浏览器无法使用某种方式或激活某个程序来处理的类型)
            response.setContentType("application/x-msdownload");
            // 设置头信息
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            // 得到输入流
            InputStream is = new FileInputStream(file);
            // 得到输出流
            ServletOutputStream os = response.getOutputStream();
            // 定义byte[]
            byte[] data = new byte[1024];
            int len = 0;
            while ((len = is.read(data)) != -1) {
                os.write(data, 0, len);
            }
            is.close();
            os.close();
        } else {
            System.out.println("文件不存在!无法下载!");
        }
    }
}
posted on 2022-08-26 20:56  内心荒漠的流浪者  阅读(153)  评论(0编辑  收藏  举报