1. 文件名非中文:
1 package ztq.servlet.study; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 public class ServletDemo1 extends HttpServlet { 15 public void doGet(HttpServletRequest request, HttpServletResponse response) 16 throws ServletException, IOException { 17 //获取要下载的文件 18 ServletContext sc = getServletContext(); 19 String path = sc.getRealPath("/pic.jpg"); 20 21 //通知客户端以下载的方式打开 22 response.setHeader("Content-Disposition", "attachment;filename = pic.jpg" ); 23 response.setHeader("Content-type", "application/octet-stream"); 24 25 //构建输入输出流 26 InputStream in = new FileInputStream(path); 27 OutputStream out = response.getOutputStream(); 28 byte[] buf = new byte[1024]; 29 int len = 0; 30 while((len = in.read(buf)) != -1){ 31 out.write(buf, 0, len); 32 } 33 in.close(); 34 out.close(); 35 } 36 public void doPost(HttpServletRequest request, HttpServletResponse response) 37 throws ServletException, IOException { 38 doGet(request, response); 39 } 40 }
2. 文件名含中文:
1 package ztq.servlet.study; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.OutputStream; 7 import java.net.URLEncoder; 8 9 import javax.servlet.ServletContext; 10 import javax.servlet.ServletException; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 public class ServletDemo1 extends HttpServlet { 16 public void doGet(HttpServletRequest request, HttpServletResponse response) 17 throws ServletException, IOException { 18 //获取要下载的文件 19 ServletContext sc = getServletContext(); 20 String path = sc.getRealPath("/人物.jpg"); 21 22 //截取文件名 23 String filename = path.substring(path.lastIndexOf("\") + 1); 24 25 //通知客户端以下载的方式打开 26 response.setHeader("Content-Disposition", "attachment;filename = " + URLEncoder.encode(filename, "UTF-8")); 27 response.setHeader("Content-type", "application/octet-stream"); 28 29 //构建输入输出流 30 InputStream in = new FileInputStream(path); 31 OutputStream out = response.getOutputStream(); 32 byte[] buf = new byte[1024]; 33 int len = 0; 34 while((len = in.read(buf)) != -1){ 35 out.write(buf, 0, len); 36 } 37 in.close(); 38 out.close(); 39 } 40 public void doPost(HttpServletRequest request, HttpServletResponse response) 41 throws ServletException, IOException { 42 doGet(request, response); 43 } 44 }