thinkphp 内置文件下载 提示(Class 'finfo' not found) 解决办法。

/* //考卷下载
public function download(){
// 接收参数
$paper_id = $_GET['paper_id'];
if ($paper_id ){
$files = M('file');
$file = $files->field('file_url')->where("relation_id=".$paper_id)->find();
// 参数处理
$filename =$_SERVER['DOCUMENT_ROOT']. __ROOT__."/".$file["file_url"];
$show = $file["file_name"];
$showname = iconv("UTF-8", "GBK", $show);
// 调用下载类

$http = new \Org\Net\Http();
$http->download($filename,$showname);
}else{
$this->redirect('U("index")');
}
}*/

使用thinkphp 自带的 http() 可能会报出

所以改用一下方法:

①控制器的内容
public function download(){
// 接收参数
$paper_id = $_GET['paper_id'];
if ($paper_id ){
$files = M('file');
$map['relation_id']=$paper_id;
$map['file_type']=2;
$file = $files->field('file_url')->where($map)->find();
$file_url = $_SERVER['DOCUMENT_ROOT']. __ROOT__."/".$file["file_url"];

//调用下载类
$paper = D('Common/Paper');
$paper ->downloads($file_url);

}
}

②模型内容:

//下载非http()方法 $file 为传入的文件的绝对路径
public function downloads($file){
$file_dir = $file;
$filename=pathinfo($file);

if (!file_exists($file_dir)){
header("Content-type: text/html; charset=utf-8");
echo "文件不存在!";
exit;
} else {
$file = fopen($file_dir,"r");
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: ".filesize($file_dir));
header("Content-Disposition: attachment; filename=".$filename['basename']);
echo fread($file, filesize($file_dir));
fclose($file);
}
}

猜你喜欢

转载自www.cnblogs.com/wongjull/p/6133923.html