思路:上传文件写方法时先判断它是否是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();
}