码迷,mamicode.com
首页 > 其他好文 > 详细

实现简单图片下载功能及防盗链

时间:2017-11-11 14:49:00      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:out   web服务   在服务器   osi   oid   contex   ref   nbsp   logs   

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下要下载的文件资源路径

 

实现简单图片下载功能及防盗链

标签:out   web服务   在服务器   osi   oid   contex   ref   nbsp   logs   

原文地址:http://www.cnblogs.com/motianjie/p/7818983.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!