package com.bjsxt.servlet; import org.apache.commons.io.IOUtils; import sun.nio.ch.IOUtil; 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.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * @program: JavaEE * @description * @author: wuhao * @create: 2019-12-16 18:54 **/ @WebServlet("/servlet/FileDownServlet") public class FileDownServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获得服务器文件路径 String realPath = req.getServletContext().getRealPath("/img"); //获得文件名 String filename = req.getParameter("filename"); File file = new File(realPath+"/"+filename); //读取服务器文件 FileInputStream fileInputStream = new FileInputStream(file); //设置下载文本的长度 resp.setContentLength((int) file.length()); // 设置文本的类型 resp.setContentType(req.getParameter("filetype")); // 设置相应头 resp.setHeader("Content-Disposition", "attachment;filename="+filename); //写出本地 ServletOutputStream outputStream = resp.getOutputStream(); IOUtils.copy(fileInputStream, outputStream); outputStream.close(); fileInputStream.close(); } }
Content-Disposition属性有两种类型
- inline :将文件内容直接显示在页面
- attachment:弹出对话框让用户下载