您的位置:首页 > 其它

76. 文件下载

2015-12-19 16:43 288 查看
1. 通过 a 标签的 href 属性

download.php

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>

<body>
<a href="1.rar">下载1.rar</a>
</body>
</html>


1.1浏览器不支持的情况:





1.2浏览器支持的情况:直接下载





2. 通过程序下载

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>

<body>
<a href="1.rar">下载1.rar</a><br/><br/><br/>
<a href="1.png">下载1.png</a><br/><br/><br/>
<a href="doDownLoad.php?filename=1.png">通过程序下载 1.png</a><br/><br/><br/>

<a href="doDownLoad.php?filename=./upload/nv.jpg">下载nv.jpg</a>
</body>
</html>


<?php

$file = $_GET['filename'];

//告诉浏览器通过附件形式来处理文件,保存为名为filename的文件
header('content-disposition:attachment;filename=' . basename($file));

//告诉下载文件的大小
header('content-length:' . filesize($file));

readfile($file);//读取文件

/*if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}*/




没有basename()的话,



如果不读文件的话,



<?php

header('content-type:text/html;charset=utf-8');

$file = $_GET['filename'];
var_dump($file);
if(!file_exists($file)){
die('文件找不到');
}else{
$fp = fopen($file,'r');
header('content-type:application/octet-stream');
header('Accept-Ranges:bytes');
header('content-disposition:attachment;filename=' . basename($file));
header('content-length:' . filesize($file));
//readfile($file);
//读取文件内容并直接输出到浏览器
echo fread($fp,filesize($file));
fclose($fp);
exit;
}


上述代码中,程序发送Header信息是用来告诉Apache和浏览器下载文件的相关信息的。
content-type的含义代表文件MIME类型是文件流格式。
如果在Apache配置里面把文件的MIME类型设为
application/octet-stream(如add application/octet-stream .xxx.rar),
那么浏览器(客户端)就会知道,这是一个文件流格式的文件并
提示用户下载。Accept-Ranges是一个响应头标,
它允许服务器指明将在给定的偏移和长度处,为资源组成部
分的接受请求,该头标的值被理解为请求范围的度量单位
。Content-Length是指定包含于请求或响应中数据的字节长度,
例如,Content-Length:382。Content-Disposition:attachment是用来告诉浏览器,文件是可以当做附件被下载,
下载后的文件名称为$file_name该变量的值。






代码:
2 <?php
3     header("Content-type:text/html;charset=utf-8");
4 //    $file_name="cookie.jpg";
5     $file_name="圣诞狂欢.jpg";
6     //用以解决中文不能显示出来的问题
7     $file_name=iconv("utf-8","gb2312",$file_name);
8     $file_sub_path=$_SERVER['DOCUMENT_ROOT']."marcofly/phpstudy/down/down/";
9     $file_path=$file_sub_path.$file_name;
10     //首先要判断给定的文件存在与否
11     if(!file_exists($file_path)){
12         echo "没有该文件文件";
13         return ;
14     }
15     $fp=fopen($file_path,"r");
16     $file_size=filesize($file_path);
17     //下载文件需要用到的头
18     Header("Content-type: application/octet-stream");
19     Header("Accept-Ranges: bytes");
20     Header("Accept-Length:".$file_size);
21     Header("Content-Disposition: attachment; filename=".$file_name);
22     $buffer=1024;
23     $file_count=0;
24     //向浏览器返回数据
25     while(!feof($fp) && $file_count<$file_size){
26         $file_con=fread($fp,$buffer);
27         $file_count+=$buffer;
28         echo $file_con;
29     }
30 fclose($fp);
31 ?>




/article/1303787.html

/article/4791401.html

/article/1266718.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: