jsp中實現文件下載的最簡單的方式是在網頁上作超級連接,如:<a href="music/abc.mp3">點擊下載</a>。可是這樣服務器上的目錄資源會直接暴露給最終用戶,會給網站帶來一些不 安全的因素。java
jsp頁面中添加以下代碼:安全
<%服務器 String filedownload = "/要下載的文件名"; //即將下載的文件的相對路徑app String filedisplay = "最終要顯示給用戶的保存文件名"; //下載文件時顯示的文件保存名稱jsp filenamedisplay = URLEncoder.encode(filedisplay,"UTF-8");網站 response.setContentType("application/x-download"); //設置爲下載application/x-downloadspa response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);.net
trycode {ci RequestDispatcher dis = application.getRequestDispatcher(filedownload); if(dis!= null) { dis.forward(request,response); } response.flushBuffer(); } catch(Exception e) { e.printStackTrace(); } finally {
} %> |
注意:
1.String filenamedownload = "/Word/做文.doc";指的是即將下載的文件的相對路徑,表示做文.doc文件放在工程下的Word文件夾內,必定要注意"/Word/做文.doc",Word前面必定要有「/」,不能寫成String filenamedownload = "Word/做文.doc";
2.RequestDispatcher下載方式更爲簡單,可是缺點在於:下載的文件必須放在工程的內部,application.getRequestDispatcher()方法的參數也必須是相對路徑。
<%@page language="java" contentType="application/x-msdownload" pageEncoding="gb2312"%> <% //關於文件下載時採用文件流輸出的方式處理: response.reset();//能夠加也能夠不加 response.setContentType("application/x-download"); String filedownload = "想辦法找到要提供下載的文件的物理路徑+文件名"; String filedisplay = "給用戶提供的下載文件名"; filedisplay = URLEncoder.encode(filedisplay,"UTF-8"); response.addHeader("Content-Disposition","attachment;filename=" + filedisplay);
OutputStream outp = null; FileInputStream in = null; try { outp = response.getOutputStream(); in = new FileInputStream(filenamedownload);
byte[] b = new byte[1024]; int i = 0;
while((i = in.read(b)) > 0) { outp.write(b, 0, i); } outp.flush(); } catch(Exception e) { System.out.println("Error!"); e.printStackTrace(); } finally { if(in != null) { in.close(); in = null; } if(outp != null) { outp.close(); outp = null; } } %> |