使用Response对象实现文件下载
package com.lijiaming.servlet; 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; import java.net.URLEncoder; /** * @基本功能: * @ClassName: FileServlet * @Description: TODO * @Author: lijiaming * @Date: 2022/2/17 21:45 * @Version 1.0 */ public class FileServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、要获取下载文件的路径 C:Users李嘉明DesktopJava学习JavaWebMaven_parentServlet01srcmain esources1.jpg String realPath = "C:\Users\李嘉明\Desktop\Java学习\JavaWeb\Maven_parent\Servlet01\src\main\resources\1.jpg"; System.out.println("下载文件的路径:"+ realPath); //2、下载的文件名是啥 String fileName = realPath.substring(realPath.lastIndexOf("\") + 1); System.out.println("文件名字为:"+fileName); //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 outputStream = resp.getOutputStream(); // 7. 将FileOutputStream流写入到buffer缓冲区,使用OutputStream将缓冲区中的数据 输出到客户端! while((len=in.read(buffer))>0){ outputStream.write(buffer,0,len); } in.close(); outputStream.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } }
上一篇:
IDEA上Java项目控制台中文乱码