浏览器下载文件的基本思路就是用一个a标签链接上要下载文件的地址就可以了,但是需要注意的是,浏览器默认对不同类型的文件有不同的处理方式。比如说href到图片就会使默认打开这个图片,如果href到一个rar文件那么点击了之后就会自动开始下载,所以我们要实现下载功能的话需要改变浏览器默认的执行方式,让点击a标签的时候能够对于图片也执行下载操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件下载</title> <script type="javascript" src="../static/js/jquery-1.11.1.min.js"></script> <script type="javascript" src="../static/js/bootstrap.min.js"></script> <link rel="stylesheet" href="../static/css/bootstrap.min.css"> <link rel="stylesheet" href="../static/css/bootstrap-theme.min.css"> </head> <body> <div class="col-sm-4 col-sm-offset-4" style="margin-top: 100px"> <a href="download.php?filename=test.jpg" class="btn btn-lg btn-success">下载图片</a> <a href="download.php?filename=test.rar" class="btn btn-lg btn-info">下载rar压缩包</a> </div> </body> </html> |
html为了要执行下载操作所以连接到了download.php然后加上要下载文件的名字,方便php获取,这样我们就可以使用php来执行逻辑了,而不是一点击就自动执行下载或打开了。
接下来是download.php
1 2 3 4 5 6 7 8 9 10 11 |
<?php $filename = $_GET['filename']; $filepath = './files/'.$filename; if(!file_exists($filepath)) { exit('文件不存在'); } else { header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename='.basename($filepath)); readfile($filepath); } |
首先先通过$_GET拿到html传过来的文件名,把文件名和路径进行拼接找到文件的路径并判断这个路径里的这个文件是否存在。
header(“Content-type: application/octet-stream”); -> 告诉浏览器我们要使用文件流的形式来输出这个文件
header(‘Content-Disposition: attachment; filename=’.basename($filepath)); ->告诉浏览器你这个文件名是什么
readfile($filepath); ->读取文件
这样就可以实现文件的下载了。要点就是要下载文件之前我们要告诉浏览器我们要下载文件而不是查看文件。