思路:上传文件写方法时先判断它是否是post方法传送,然后上传文件。
代码如下:
public function upload(){ if(IS_GET){ $this->display(); // exit; }else{ $upload = new \Think\Upload();// 实例化上传类 $upload->maxSize = 0 ;// 设置附件上传大小,文件上传的最大文件大小(以字节为单位),0为不限大小 $upload->exts = array('csv');// 设置附件上传类型,上传的文件的类型 $upload->rootPath = './Public/Upload/'; // 设置附件上传根目录 $upload->savePath = ''; // 设置附件上传(子)目录 // 上传文件 $info = $upload->upload(); // dump($info); // $model=M('student'); if(!$info) {// 上传错误提示错误信息 $this->error($upload->getError()); }else{// 上传成功 获取上传文件信息 // foreach($info as $file){ // echo $file['savepath'].$file['savename']; // } $this->import($upload->rootPath.$info['file']['savepath'].$info['file']['savename']); // $this->success('上传成功'); } } }
2.如何判断上传文件的信息是否重复,首先要从文件中获取数据,如果存在则重复,不执行添加代码,如果不存在,则添加到数据库中。下面是一段判断学号上传是否重复的代码,上传成功执行这段代码即可
代码如下:
// 转换格式 public function import($file){ // echo $file; // exit; // $file="./Public/Upload/2018-03-23/5ab4431d120ae.csv"; //检测编码格式 $encoding=detect_encoding($file); //如果不是utf-8格式,则转换为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){ $fields=array('no','name','sex'); $model=M('newstudent'); $arrNo=$model->getField('no',true);//获取表单里的学号,true代表获取全部的学号,如果不写就获取一个 // dump($arrNo); // exit; $arr=array();//创建一个数组 while(($row=fgetcsv($fp,1000,","))!==false){ $row=array_combine($fields, $row); $ret=in_array($row['no'], $arrNo);//判断是否存在$row['no']中,存在为真 // dump($ret); // exit; if($ret==false){//如果没有就进 $arrNo[]=$row['no']; $arr[]=$row; $file= './Public/Download/demo.log';//日志文件路径 $e.= "导入成功"; file_put_contents($file, $e); }else{//有就输出 $file= './Public/Download/demo.log'; $e.= $row['no']."学号已存在".PHP_EOL; // echo ""; file_put_contents($file, $e); // echo $row['no'].'已存在'.'<br>'; continue; } } if(count($arr)==1000){ $model->addAll($arr); unset($arr); } // dump($row); } if(count($arr)>0){ $model->addAll($arr); } // $this->show('添加成功','utf8'); $this->download(); }