thinkphp中的文件上传!

时间:2022-09-24 14:53:57

我们在遇到向数据库中插入数据的时候,往往都是在页面上实现,新增一条或多条记录,要是数据少的话,还可以,但是数据要是很多非常多的话,要还是在页面上一条条的添加,这是非常费时间的,所以我们可以在页面上添加一个导入功能,将我们们需要的数据直接导入到数据库,而不是一条条的插入记录,下面是一些代码来实现导入功能的:

public function upload(){

    if(IS_GET){
          $this->display();
          exit;
    }
    $upload=new \Think\Upload();//实例化上传类
    $upload->maxSize =0;//设置附件上传大小
    $upload->exts=array('csv');//设置上传文件的类型
    $upload->rootPath='./Public/Upload/';//设置上传文件的根目录
    $upload->savePath='';//设置上传文件子目录
     
    //上传文件
    $info =$upload->upload();
      // dump($info);
      // exit;
    if(!$info){//上传错误提示信息
     $this->error($upload->getError());
    }else{//上传成功
    $this->success('上传成功!'.$info['file']['sevepath'].$info['file']['savename']);
    }    

}

上面的方法会将你选中的文件上传到你设置的目录当中去,还没有实现将数据插入到数据库中,我们新建一个新的方法来实现将上传的文件插入到数据库中:

public function import(){

       //$file是上传到你目录当中文件的路径

         $file = "./Public/Upload/2018-03-26/5ab8c1ce7b2ca.csv";       
          //检测文件的编码
        $encoding=detect_encoding($file);
          //如果不是utf8格式,则转换为utf8
        if($encoding !='UTF-8'){
                $contens=file_get_contents($file);
                $contens=mb_convert_encoding($contens, 'utf-8',$encoding);
                file_put_contents($file, $contens);
        }
        $fp =fopen($file,'r');
     
        if($fp){
        $fileds=array('no','name','sex');
        $model =M('student');
            $arrno=$model->getField('no',true);
        $arr =array();
        while(($row=fgetcsv($fp,1000,","))!==false);
            $row=array_combine($fileds, $row);
            // $row['py']=$SpGetPinyin($row['name'],'UTF-8');
            if(in_array($row['no'],$arrno )){
               $file='./Public/upload/text.txt';
               $current .=$row['no'].'已存在'.'<br>';
               file_put_contents($file,$current);//把一个字符串写到一个文件里
            }else{
              $arrno[]=$row['no'];
               $arr[]=$row;
               $file='./Public/upload/text.txt';
               $current1 .=$row['no'].'导入成功'.'<br>';
               file_put_contents($file,$current1);
            }    
      if(count($arr)==1000){
      $model->addAll($arr);
      unset($arr);      
      }

}