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

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下要下载的文件资源路径
时间: 2024-10-11 10:53:41

实现简单图片下载功能及防盗链的相关文章

简单实现下载功能--jsp,servlet

刚到公司,前天给我的第一个小任务,虽然只是做个简单的下载功能. 但一开始还是花了不少时间去理解导师的意思,而且还要用到一些公司的库类,花了一个下午才做好. 大概有三种方法 1.直接用a标签跳转到指定位置的目标文件.  <a href="doc/help.txt" /></a>(文件是位于doc文件夹下help.txt)(不推荐这种方法,而且这跳转会直接打开文件) 2.jsp跳转然后直接在jsp里面写下载功能 <a href="download.j

如何拒绝对某特定扩展名文件的下载,如何防盗链

问题 如何拒绝对某特定扩展名文件的下载,如何防盗链 解决方案 虚拟主机服务器上,如果有过多的mp3等文件,可能会被搜索引擎查到并且导致巨额的下载量.这种情况下,对服务器的负担有很大的影响那么如和禁止某种特殊文件的下载呢? 编辑/usr/prima/etc/httpd/site.conf在其中加入如下一段:<FilesMatch "\.(mp3|avi)"> Order Deny,AllowDeny from all</FilesMatch>重新启动/etc/in

Nginx缓存功能、防盗链、URL重写

nginx做为反向代理时,能够将来自upstream的响应缓存至本地,并在后续的客户端请求同样内容时直接从本地构造响应报文. nginx的缓存数据结构: 共享内存:存储键和缓存对象元数据 磁盘空间:存储数据 用法: Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number

nginx 下载限速,防盗链

学习nginx中在网上遇到这些功能点特记之 NGINX下载限速: 先在 http 区段找到 limit_zone,再把注释拿掉~# 设定一个叫做 crawler 的区域,大小为 20MB limit_zone crawler $binary_remote_addr 20m 然后在 server 的区段加上 # 限制档案类型只能单线下载 location ~ .*\.(zip|rar|gz|tar|exe|mp3|flv|swf|jpg|jpeg)$ { limit_conn crawler 1;

php代码实现简单图片下载

连接代码:<a href="test.php?url=test/images/image_01.jpg">图片下载</a> test.php文件代码: $filename = $_GET['url'];//图片地址,可以绝对地址也可以相对地址header("Content-Type: application/force-download");header('Content-Disposition: attachment; filename=&

.htaccess防盗链方法(文件、图片)

http标准协议中有专门的字段记录referer,一来可以追溯上一个入站地址是什么,二来对于资源文件,可以跟踪到包含显示他的网页地址是什么. 因此所有防盗链方法都是基于这个Referer字段两种方法:第一种是使用apache 文件FileMatch限制,在httpd.conf中增加 ( 其实也可以将把下面的语句存成一个.htaccess文件),并放到你的网站 的根目录(就是www/html目录),这样别人就没有办法盗链了. SetEnvIfNoCase Referer "^http://afis

httpd之防盗链和限制下载

配置httpd防盗链可以用SetEnvIfNoCase和rewrite实现反盗链(Anti-Leech) 一.使用SetEnvIfNoCase,注意放行自己的网址 SetEnvIfNoCase Referer "^http://.*\.sunnysky\.com" local_ref SetEnvIfNoCase Referer ".*\.byqk\.com" local_ref SetEnvIfNoCase Referer "^$" local

防盗链Nginx设置图片防盗链,设置无效的请仔细看红字

*******************************************************************切记,替换的图片地址要使用没有防盗链的网站图片,否则由于替换的图片其实也处于防盗链情况下,会造成仍旧无法显示设置的图片.******************************************************************* 一.全站图片防盗链 在/usr/local/nginx/conf/nginx.conf文件要添加防盗链的ser

php判断远程图片是否防盗链

function checkpic($url){ $curl = curl_init($url);//设置url curl_setopt($curl, CURLOPT_REFERER, 'http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"]);//伪装referer(正常在地址栏输入网址能打开,因为referer是空的,而在网页中用 src 打开时referer是有内容的所以打不开,referer内容可以到浏览器控制台查看,这