首页 > 其他 > 详细

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

时间:2017-11-11 14:38:05      阅读:240      评论:0      收藏:0      [点我收藏+]

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

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!