当前位置 : 主页 > 网络编程 > PHP >

PHP文件上传与下载

来源:互联网 收集:自由互联 发布时间:2021-06-28
PHP文件上传与下载 /*PHP文件上传与下载 1、将文件上传至服务器,获取文件及文件名、文件大小等 2、将文件名、大小等存入数据库中,再随机生成一个新文件名存入系统 3、下载时通过
PHP文件上传与下载
/*
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);
}
上一篇:获取区间日期
下一篇:PHP导入CSV文件
网友评论