1. 程式人生 > >判斷是否登陸然後從伺服器下載一個檔案

判斷是否登陸然後從伺服器下載一個檔案

有很多檔案我們需要從伺服器上面下載到我們的電腦上面,下面是一個小demo

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();
	}
	}
	

}
我是把所有的需要下載的檔案都放到了專案中的dowload檔案及下了。上面的是servlet程式碼,下面的是jsp程式碼
<body>
  <h1>下載檔案</h1>
  <ul>
  	<li> <a href="dowload?fname=pg3.jpg">下載圖片</a> </li>
  	<li><a href="dowload?fname=sss.doc">下載文件</a></li>
  </ul>
   
     
  </body>
其中在jsp中進行傳引數的時候最好不要是中文,因為有可能亂碼。那麼解決亂碼的問題可以參考我的另一篇部落格關於get請求亂碼的問題