thinkphp导入文件以及下载文件

在一个项目中除了增删改查非常重要之外,导入文件也是不可缺少的,接下来我就根据我所学的跟大家分享一下。

thinkphp有自己的上传实例化类,代码如下:

 
 
public function upload(){
		if(IS_GET){
			$this->display();
			exit();
		}
		$upload=new \Think\Upload();//实例化上传类
		$upload->maxSize=0;//设置附件上传文件大小,0为不限大小
		$upload->exts=array('jpg','gif','png','jpeg','csv');//设置附属上传文件类型
		$upload->rootPath="./Public/Upload/";//设置附属文件的根目录
		$upload->savPath='';//设置附件上传子目录

		//上传文件
		$info=$upload->upload();
		if(!$info) {// 上传错误提示错误信息
			$this->error($upload->getError());
		}else{// 上传成功 获取上传文件信息
			 $data=$this->import($upload->rootPath . $info['excelFile']['savepath'] . $info['excelFile']['savename']);

			}
	}


接下来需要将上传大的文件导入到数据库中,代码如下:

public function import($file){
		$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){
			$fields=array('no','name','sex','pinyin');
			$model=M('student');
			$arrNo=$model->getField('no',true);
			$arr=array();	

			while(($row = fgetcsv($fp,1000,","))!== false) {
				$py=$row[1];
				$row['pinyin']=SpGetPinyin($py);//生成拼音
				$row = array_combine($fields,$row);
				if(in_array($row['no'], $arrNo)){ //去重,避免重复上传
					 $data[]=$row['no'] . '数据已存在' . '<br>';
				}else{
					$arrNo[] = $row['no'];
                    $arr[] = array_combine($fields, $row);
                    $data[]= $row['no'] . '添加成功' . '<br>';
				}
				if(count($arr)==1000){
					$model->addAll($arr);
					unset($arr);
				}
			}
			if(count($arr)>0){
				$model->addAll($arr);
			}
			$data=implode(' ',$data);
			$this->frame($data);
		}
	}

这样写完所有代码,虽然可以成功上传文件并导入到数据中,但运行并不完美,我们在调用一个下载文件的方法,将运行结果下载在一个日志文件中,相关管代码如下:


public function frame($str){
		// 下载文件
		$file_name='123.log';//下载文件名

		$file_dir='';//下载文件存放目录
		// dump($file_dir);
		// exit();       
		//检查文件是否存在    
		if (! file_exists ( $file_dir . $file_name )) {    
    	echo "文件找不到";    
   		exit ();    
		} else {    
    	//打开文件    
    	$file = fopen ( $file_dir . $file_name, "r" );    
    	//输入文件标签
    	file_put_contents($file, $this->show($str),'utf8');     
    	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 ();  
    	} 
	

这样就完成了文件上传了,接下来就只需要在前台的表单中post提交就完成了,大家学会了吗?以上就是我对thinkPHP文件上传的所有内容了,希望对大家有所帮助。



猜你喜欢

转载自blog.csdn.net/gqycrush/article/details/79748216
今日推荐