一般各大网站提供下载的地方,要么是自己网站服务器,要么百度云、360云等。但是如果自己想放自己的服务器上怎么办呢?一般很正常的就是放在web服务器目录下,用a标签去链接,就能直接下载了,但是别人就可以拿到这个链接自己到处乱发怎么办呢?并且只允许别人下载页面只能够在我自己的网站上面下载呢?
我之前提供下载的地方是 dl.acgxt.com 加上一些参数,但是要想拿到真实的下载地址呢?拿到也下不了...我在下载页面上设置了session才能够下载,首先我们得做一个php的下载文件(download.php),然后使用ajax去获取session,然后在去访问download.php返回文件即可完成。
红色框里表示的是下载文件访问的路径
由于设置了session验证,所以如果直接去访问这个地址就会给出一个错误。
HTML
<input type="text" id="fileName"> <input type="button" id="download" value="下载"> <script type="text/javascript" src="https://static.acgxt.com/jquery.js"></script> <script type="text/javascript"> $(function(){ $("#download").click(function(){ var fileName = $("#fileName").val(); $.ajax({ url:"download.php", type:"get", dataType:"json", data:{ file:fileName }, success:function(data){ if(data['error']=='0'){ window.location.href="download.php?dl="+fileName }else{ alert(data['meta']); } } }) }) }) </script>
download.php
<?php session_start();//开启session $file_dir = "download/";//文件储存目录 if (isset($_GET['dl'])) { global $file_dir; $fileName = $_GET['dl']; if(isset($_SESSION[$fileName])==true){ $file_name = mb_str($fileName);//转换编码 $file = $file_dir . $file_name;//文件所在路径 if (file_exists($file)) {//判断文件是否存在 $fp = fopen($file, "r");//以只读的方式打开文件 $file_size = filesize($file);//获取文件大小 //发送下载需要的https头文件 header("Content-type: application/octet-stream"); header("Accept-Ranges: bytes"); header("Accept-Length: " . $file_size);//显示文件大小 header("Content-Disposition: attachment; filename=" . $file_name);//告知用户文件名称 echo fread($fp, $file_size);//读取输出文件 fclose($fp);//关闭文件 unset($_SESSION[$fileName]);//最后删除session exit();//结束 }else{ echo json_encode(array( 'error'=>1, 'meta'=>'文件不存在,无法下载' )); } }else{ //当别人不是从本页面下载的时候 echo json_encode(array( 'error'=>1 )); } } //首先在本页面提交下载,设置session if(isset($_GET['file'])){ global $file_dir; $fileName = $_GET['file']; $file_name = mb_str($fileName);//转换编码 $file = $file_dir . $file_name;//文件所在路径 if (file_exists($file)) {//判断文件是否存在 $_SESSION[$fileName] = true; echo json_encode(array( 'error'=>0 )); }else{ echo json_encode(array( 'error'=>1, 'meta'=>"文件不存在,无法下载" )); } } //由于文件名称如果是中文会乱码,随意将gbk转换为utf-8编码 function mb_str($string){ return mb_convert_encoding($string,"GBK","UTF-8"); } ?>
Demo下载地址:
【七空幻音】使用PHP让用户在指定页面下载文件
1条评论登录后可见