文件去重 下载( 如何去重,下载文件)?

上传文件:

定义一个upload

实例化上传类,设置附件上传大小,设置上传类型,设置附件上传根目录,设置附件上传(子)目录

如果上传成功,就调用import方法,将文件上传到数据库

 

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

将上传文件导入数据库

public function import($file){
    $encoding=detect_encoding($file);

    //如果不是utf-8转换utf-8
    if($encoding!='UTF-8'){
       $contents=file_get_contents($file);
       $contents=mb_convert_encoding($contents,'utf-8', $encoding);
       file_put_contents($file, $contents);
      
    }
    // echo $encoding;
    // exit;
    $fp=fopen($file, 'r');
       if($fp){

        $fields=array('no','name','sex');
        $model=D('Student');
        while(($row = fgetcsv($fp,1000,","))!== false){
           $row=array_combine($fields, $row);
            // dump($data);
            // exit;
            $name = $row['name'];
            $row['py'] = SpGetPinyin($name);
           if(count($arr)==1000){
              $model->addAll($arr);
              unset($arr);
           } 
        }
          if(count($arr)>0){
             $model->addAll($arr);
          }
         $this->success("导入成功",'index');
       }
  }

2.上传文件去重:(这里我们演示学号去重)

首先我们应该从数据库里获取学号,将它存进一个数组中;

然后将上传文件的存进一个数组中,得到上传的学号;

用in_array()函数来判断上传的学号是否存在,若存在就提示该学号已存在,反之将学号存入数据库

if($fp){
        $fields=array('no','name','sex');
        $model=D('Student');
         
     	  $arrNO=$model->getField('no',true);
        $arr = array();
        while(($row = fgetcsv($fp,1000,","))!== false){
           $row=array_combine($fields, $row);
            // dump($data);
            // exit;
            $name = $row['name'];
            $row['py'] = SpGetPinyin($name);


           if(in_array($row['no'],$arrNO)){
              $current .= $row['no']."已存在\r\n";
           }else{
              $arrNO[]=$row['no'];
              $arr[]=$row;
              echo $row['no']."导入成功\r\n";
           }
           if(count($arr)==1000){
              $model->addAll($arr);
              unset($arr);
           } 
        }
          if(count($arr)>0){
             $model->addAll($arr);
          }
         $this->success("导入成功",'index');
       }

 

 

 

3.文件下载

将得到的提示信息下载到.txt中(使用file_put_contents);

 if(in_array($row['no'],$arrNO)){
              $file = './Public/uploaddir/demo.txt';
              $current .= $row['no']."已存在\r\n";
           }else{
              $arrNO[]=$row['no'];
              $arr[]=$row;
              $file = './Public/uploaddir/demo.txt';
              $current .= $row['no']."导入成功\r\n";
           }
 
 
file_put_contents($file, $current);
       $file_name = "demo.txt";
       $file_dir = "./Public/uploaddir/";
       if(!file_exists($file_dir.$file_name)){
        echo "文件找不到";
        exit;
       }else{
        $file = fopen($file_dir.$file_name,"r");
        Header("content-type:application/octet-stream");
        Header("Accept-Ranges:bytes");
        Header("Accept-Length:".filesize($file_dir.$file_name));
        Header("Content-Disposition:attachment;filename=".$file_name);
        echo fread($file,filesize($file_dir.$file_name));
        fclose($file);
     exit;
   }

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值