1 /** 2 * 檔案下載防止檔案被別的網站引用 3 * 直接訪問會訪問不了 4 * @Description: 5 * @param type 6 * 檔案字尾名 7 * @param fileName 8 * 檔名 9 * @param request 10 * @param response 11 * @param referer 12 * 轉發頭部裡面只有包含您的域名才給資源 13 * @return 14 */ 15 // @RequestMapping(value="/downloadBySelf/{fileName}/{type}",method=RequestMethod.GET) 16 @RequestMapping(value = "/downloadBySelf/{fileName}/{type}", method = RequestMethod.GET) 17 public String downloadFileByself(@PathVariable("type") String type, 18 @PathVariable("fileName") String fileName, 19 HttpServletRequest request, HttpServletResponse response, 20 @RequestHeader String referer // 這個就是獲取頭部資訊 21 ) { 22 log.info(referer); 23 if (referer != null) {//這裡可以設定自己的域名 24 // if(null!=referer&&referer.contains("?")) 25 if (fileName != null) { 26 String realPath = request.getServletContext().getRealPath( 27 "WEB-INF/File/"); 28 File file = new File(realPath, fileName + "." + type); 29 if (file.exists()) { 30 response.setContentType("application/force-download");// 設定強制下載不開啟 31 response.addHeader("Content-Disposition", 32 "attachment;fileName=" + fileName + "." + type);// 設定檔名 33 byte[] buffer = new byte[1024]; 34 FileInputStream fis = null; 35 BufferedInputStream bis = null; 36 try { 37 fis = new FileInputStream(file); 38 bis = new BufferedInputStream(fis); 39 OutputStream os = response.getOutputStream(); 40 int i = bis.read(buffer); 41 while (i != -1) { 42 os.write(buffer, 0, i); 43 i = bis.read(buffer); 44 } 45 } catch (Exception e) { 46 // TODO: handle exception 47 e.printStackTrace(); 48 } finally { 49 if (bis != null) { 50 try { 51 bis.close(); 52 } catch (IOException e) { 53 // TODO Auto-generated catch block 54 e.printStackTrace(); 55 } 56 } 57 if (fis != null) { 58 try { 59 fis.close(); 60 } catch (IOException e) { 61 // TODO Auto-generated catch block 62 e.printStackTrace(); 63 } 64 } 65 } 66 } 67 } 68 } 69 return null; 70 }
@RequestHeader String referer // 這個就是獲取頭部資訊由這個來獲取自己的頭部資訊
如果這個頭部資訊含有自己的域名則說明這個資源是自己的網站中的,否則則不讓他進行下載