SpringMvc檔案資源防止被外鏈連結

lonecloud發表於2016-10-23
 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 // 這個就是獲取頭部資訊由這個來獲取自己的頭部資訊

如果這個頭部資訊含有自己的域名則說明這個資源是自己的網站中的,否則則不讓他進行下載

 

相關文章