1.在ThinkPHP中使用上传功能无需进行特别处理,但要注意,要使用上传功能 表单中需要设置 enctype="multipart/form-data"。
2.tp自带了上传文件的类,位置:Think/Upload.class.php。所以tp框架用起来是十分方便的。我们来看下upload方法的实现代码:
//上传文件
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();
if(!$info){
$this->error($upload->getError());
}else{
$this->success('上传成功'.$info['file']['savePath'].$info['file']['savename']);
}
}
3.每个上传的文件是一个记录了下面信息的数组,文件上传成功后,就可以使用这些文件信息来进行其他的数据操作,例如保存到当前数据表或者单独的附件数据表。
例如,下面表示把上传信息保存到数据表的字段:
$this->success('上传成功'.$info['file']['savePath'].$info['file']['savename']);
4.如何判断上传文件的信息是否重复,首先要从文件中获取数据,如果存在则重复,不执行添加代码,如果不存在,则添加到数据库中。下面是一段判断学号上传是否重复的代码,上传成功执行这段代码即可
$fp=fopen($file,'r');
if($fp){
$fields=array('no','name','sex');
$model=M('newstudent');
$arrNo = $model->getField('no',true);
$arr=array();
while(($row=fgetcsv($fp,1000,","))!==false){
$row=array_combine($fields, $row);
if(in_array($row['no'], $arrNo)){
echo $row['no'].'存在'.'<br>';
}else{
$arrNo[]=$row['no'];
$arr[]=$row;
echo $row['no'].'导入成功'.'<br>';
}
if(count($arr)==1000){
$model->addAll($arr);
unset($arr);
}
}
if(count($arr)>0){
$model->addAll($arr);
}
$this->success('添加成功');
}
}