1. 程式人生 > >實現簡單圖片下載功能及防盜鏈

實現簡單圖片下載功能及防盜鏈

nco eth coder lose ring || pro rect 下載

1.防盜鏈的基本原理就是就是一句話:通過判斷request請求頭的refer是否來源於本站。

2.HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用於處理。

@Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //設置編碼
                response.setContentType("text:html;charset=utf-8");
        
        
//下載功能,並實現防盜鏈 String referer = request.getHeader("Referer"); //獲取Referer上的鏈接信息 //判斷連接是否為空或者是以自己項目名開頭 if(referer == null || !referer.startsWith("http://localhost:8080/day1111")){ response.sendRedirect("/day1111/error.html"); return; //阻止代碼往下運行 }
//下載功能實現 String temp = request.getParameter("filename"); String filename = URLEncoder.encode(temp, "utf-8"); //避免頁面顯示文件名亂碼問題 response.setHeader("content-disposition", "attachment;filename="+filename); //獲取當前的真實物理路徑(在服務器上的路徑) String realPath = getServletContext().getRealPath("images/"+temp);
//文件輸入流 FileInputStream fis = new FileInputStream(realPath); //文件輸出流 OutputStream os =response.getOutputStream(); //緩沖數組 byte[] buffer = new byte[1024]; int len = 0; while((len=fis.read(buffer))>0){ os.write(buffer, 0, len); } os.close(); fis.close(); }
註意點:getServletContext().getRealPath("images/"+temp);  該路徑是對應在項目WebContent下要下載的文件資源路徑

實現簡單圖片下載功能及防盜鏈