-
要获取下载文件的路径
-
下载的文件名
-
设置想办法让浏览器能够支持下载我们需要的东西
-
获取下载文件的输入流
-
创建缓冲区
-
获取OutputStream对象
-
将FileOutputStream流写入到buffer缓冲区
-
使用Outputstream将缓冲区中的数据输出到客户端!
public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1.要获取下载文件的路径 //String realPath = "E:\\学习笔记\\JAVAWEB\\javaweb-02-servlet\\response\\target\\classes\\图片.png"; String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/图片.png"); System.out.println("下载文件的路径:" + realPath); //下载文件的路径:D:\JAVAEE_DEV\apache-tomcat-9.0.43\webapps\r\WEB-INF\classes\图片.png // 2.下载的文件名 String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1); // 3.设置想办法让浏览器能够支持(Content-Disposition)下载我们需要的东西,中文文件名使用URLEncoder.encode编码,否则可能乱码 resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); // 4.获取下载文件的输入流 FileInputStream in = new FileInputStream(realPath); // 5.创建缓冲区 int len = 0; byte[] buffer = new byte[1024]; // 6.获取OutputStream对象 ServletOutputStream out = resp.getOutputStream(); // 7.将FileOutputStream流写入到buffer缓冲区,使用Outputstream将缓冲区中的数据输出到客户端! while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } in.close(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
-
web.xml
<servlet> <servlet-name>filedown</servlet-name> <servlet-class>com.ping.servlet.FileServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>filedown</servlet-name> <url-pattern>/down</url-pattern> </servlet-mapping>
-
测试结果:地址栏输入http://localhost:8080/r/down,浏览器下方提示下载
JavaWeb应用HttpServletResponse实现文件下载
最新推荐文章于 2023-04-25 08:25:44 发布