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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现简单图片下载功能及防盗链相关的知识,希望对你有一定的参考价值。

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

 

以上是关于实现简单图片下载功能及防盗链的主要内容,如果未能解决你的问题,请参考以下文章

nginx 实现图片防盗链功能

nginx 实现图片防盗链功能

一行代码实现防盗链!

图片防盗链原理及应对方法

配置Nginx实现防盗链功能!

其实,图片防盗链的实现如此简单