PHP文件上传与下载 /*PHP文件上传与下载 1、将文件上传至服务器,获取文件及文件名、文件大小等 2、将文件名、大小等存入数据库中,再随机生成一个新文件名存入系统 3、下载时通过
/* PHP文件上传与下载 1、将文件上传至服务器,获取文件及文件名、文件大小等 2、将文件名、大小等存入数据库中,再随机生成一个新文件名存入系统 3、下载时通过数据库获取文件的原名及路径,动态读取并推送到浏览器提供下载 4、这样没有文件路径,不会被盗下。 */ public function uploadSorft(){ //p($_POST); //p($_FILES); $file = $_FILES['file']['tmp_name']; //接收上传的文件 if (empty ($file)) {echo '请选择要上传文件!';return; } $filename=$_FILES['file']['name']; $newname=rand(10000,20000);//生成一个10000到20000的随机数,作为新文件的名称 $filePath=ROOT_PATH.DS.'uploadFold'; while(true){ // 检查文件名是否重复,如果重复就再重新生成一个 if(!file_exists($filePath.DS.$newname)){ break; }else{ $newname=rand(10,15); } } $filePath=$filePath.DS.$newname; copy($file,$filePath);//将临时文件复制到指定目录 $name=trim($_POST['name']); $kind=trim($_POST['kind']); $os=trim($_POST['os']); $miaosh=trim($_POST['miaosh']); $Dbkind=Db::table('sorftKind')->where('name',$kind)->count('id'); if($Dbkind < 1){ Db::table('sorftKind')->insert(['name'=>$kind]); } $kind=Db::table('sorftKind')->where('name',$kind)->first()['id']; $Dbos=Db::table('os')->where('name',$os)->count('id'); if($Dbos < 1){ Db::table('os')->insert(['name'=>$os]); } $os=Db::table('os')->where('name',$os)->first()['id']; $back=Db::table('download')->insert(['name'=>$name,'fileName'=>$filename,'kind_id'=>$kind,'os_id'=>$os,'miaosh'=>$miaosh,'filePath'=>$filePath]); //if($back){echo 'true';}else{echo 'false';} go("jk/index/uploadSorft"); exit(); } public function downLoad(){ $sorftArr=$sorft=Db::table('download')->where('id',$_GET['id'])->first(); $fp=fopen($sorftArr['filePath'],"r"); $file_size=filesize($sorftArr['filePath']); header("Content-type:application/octet-stream"); header("Accept-ranges:bytes"); header("Accept-length:$file_size"); header("Content-Disposition:attachment;filename=".$sorftArr['fileName']); $buffer=1024; $file_count=0; while (!feof($fp)&&$file_size-$file_count>0) { $file_data=fread($fp,$buffer); $file_count+=$buffer; echo $file_data; } fclose($fp); }