判斷是否登陸然後從伺服器下載一個檔案
阿新 • • 發佈:2019-02-01
有很多檔案我們需要從伺服器上面下載到我們的電腦上面,下面是一個小demo
我是把所有的需要下載的檔案都放到了專案中的dowload檔案及下了。上面的是servlet程式碼,下面的是jsp程式碼package controlor; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; public class dowload extends HttpServlet { /** * 從伺服器端下載一個檔案 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 檢查是否登入 HttpSession session=request.getSession(); // 獲取session並從中獲取到登入時存入的值;qqq是我登入時存入session的登入名和密碼 if(session.getAttribute("qqq")==null){ // 如果獲取到的值為空,那麼跳轉到登入頁面 session.setAttribute("from", "dowload.jsp"); response.sendRedirect("index.jsp"); }else { // 如果已經登入,則開始下載任務 // 獲取從頁面傳過來的需要下載的檔名 String fname=request.getParameter("fname"); ServletContext application=this.getServletContext(); // 獲取所要下載的檔案的格式型別 String mime=application.getMimeType(fname); // 設定響應的型別格式 response.setContentType(mime); // 為響應的資訊設定響應頭,Content-Disposition表示以哪種形式進行響應; // attachment表示以附件的形式進行相應;filename=fname代表相應的檔案 response.setHeader("Content-Disposition", "attachment;filename="+fname); // 將dowload資料夾的相對路徑轉換為絕對路徑,需要被下載的檔案都放在這個資料夾中 String path=application.getRealPath("dowload"); // 構造輸入位元組流 InputStream is= new FileInputStream(path+"/"+fname); // 構造輸出位元組流 OutputStream os= response.getOutputStream(); byte[]arr=new byte[100]; int len=0; while((len=is.read(arr))!=-1){ os.write(arr,0,len); } // 關閉輸入輸出流 is.close(); os.close(); } } }
其中在jsp中進行傳引數的時候最好不要是中文,因為有可能亂碼。那麼解決亂碼的問題可以參考我的另一篇部落格關於get請求亂碼的問題<body> <h1>下載檔案</h1> <ul> <li> <a href="dowload?fname=pg3.jpg">下載圖片</a> </li> <li><a href="dowload?fname=sss.doc">下載文件</a></li> </ul> </body>