package chensi.com; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import java.nio.file.FileAlreadyExistsException; 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; /** * Servlet HttpServletResponse 下載文件 ,瀏覽器提示我們將圖片下載下來。 */ @WebServlet("/ResponseDemo7") public class ResponseDemo7 extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通過路徑將圖片以流的形式得到 //通過相對路徑得到絕對路徑 String path = this.getServletContext().getRealPath("/WEB-INF/classes/爪哇.jpg"); //有了路徑可以得到輸入流(圖片,要用字節輸出流) FileInputStream fis = new FileInputStream(path); //使用絕對路徑將圖片用輸入流變成一個流 fis(圖片) //用response創建一個輸出流 ServletOutputStream outputStream = response.getOutputStream(); /*我們要將圖片下載下來 */ //得到要下載的文件名 String fileName = path.substring(path.lastIndexOf("\\")+1); System.out.println(fileName); //設置文件的編碼 fileName = URLEncoder.encode(fileName,"UTF-8"); //告知客戶端要下載文件 response.setHeader("content-disposition", "attachment;filename="+fileName); response.setHeader("content-type", "image/jpeg"); //執行fileOutputStream的輸出操作 int len = 1; byte[] b = new byte[1024]; while((len=fis.read(b))!=-1){ outputStream.write(b, 0, len); } outputStream.close(); fis.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }