昨天晚上寫了個文件上傳,今天想弄弄文件的下載。收到文件下載,我們還是先理一理思路。
文件下載其實說多了就是從服務器中(你部署的項目中)讀取出資源文件,然後通過response返回給客戶端。其實tomcat已經對文件上傳有很好的封裝了,我們只需要知道需要下載的文件路徑和文件字節流就能夠輕鬆地實現文件下載功能。不多說了,直接上代碼
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("filename");
//獲取文件的絕對路徑
String path = request.getServletContext().getRealPath("WEB-INF/download/"+name);
System.out.println(path);
//設置文件的MIME類型
response.setContentType(getServletContext().getMimeType(name));
//設置響應頭文件,標識爲文件下載類型,並附上文件的名稱
response.setHeader("Content-Disposition", "attachment;filename="+name);
//對文件進行讀取和存貯
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
byte[] flush = new byte[1024];
int len = 0;
while((len = is.read(flush))!=-1){
os.write(flush,0,len);
os.flush();
}
is.close();
}
其中還有一種文件下載的方式,而且賊簡單。就是直接以超鏈接的形式指定到你的文件,客戶端點擊文件之後,就會自動下載。不過這種方式也有弊端,如果是瀏覽器識別的文件,瀏覽器會直接打開,而不會下載。代碼如下:
<body>
<a href = "文件路徑">超鏈接實現下載</a><br/>
<a href ="DownLoadServlet?filename=1.xls" >放假通知表!</a>
</body>
最後還有一點稍微提一下,本人在實現上述代碼的過程中,還真遇到了一些問題。由於是剛剛裝的tomcat很多配置沒有修改,出現了路徑讀取錯誤。其實原因很簡單,就是部署的項目不再tomcat中,而是在eclipse的.metadata\.plugins\org.eclipse.wst.server.core\目錄下。其實按理說,以eclipse的部署路徑也是不會出錯的,但是誰叫本人粗心呢。。download的文件夾目錄不再webContent下。
好了,說的問題其實也不是問題,但是能夠因爲自己的小問題瞭解到了tomcat的配置一些細節,也算是有所收穫。但願大家也能夠在閱讀這篇文章之後有所收穫。如果有什麼問題,還望能夠一起探討,大家共同進步!