上传文件:
设置好上传的参数后,可以调用 Think\Upload 类的upload方法进行附件上传,如果失败,返回false,
并且用getError方法获取错误提示信息;如果上传成功,就返回成功上传的文件信息数组。
代码如下:
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
// 上传文件
$info = $upload->upload();
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{// 上传成功 获取上传文件信息
foreach($info as $file){
echo $file['savepath'].$file['savename'];
}
}
下载文件:
需要下载的是一个文件名为xxx.rar的文件,首先创建文件是download.php的PHP文件。需要使用PHP的文件处理API函数。它是通过fread()函数把文件直接输出到浏览器提示用户下载,这样所有的处理都是在服务器端完成的,因此用户就无法获得文件具体存储位置信息的,示例代码如下:
$file_name = "xxx.rar"; //下载文件名
$file_dir = "./up/"; //下载文件存放目录
//检查文件是否存在
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 ();
}
?>
其实文件上传下载都不难,可以说有固定代码,只要会用就行。最难的还是去重问题,这个比较有困难!
比如:解决学号去重问题
首先,将原有数据表中的所有学员存入一个数组$arrNo中。然后,读取文件中的一条数据。其次,检测该行中的学号在数组arrno中是否存在,如果不存在,写入二位数组$arr,并且把学号追加到arrNo中;如果存在则继续读取下一行,最后仍然是,读取下一行...
示例代码如下:
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);
}
//解析csv
$fp=fopen($file,'r');
if($fp){
$fields=array('no','name','sex');
$model=M('newstudent');
//解决学号去重问题
//将原有数据表中的所有学员存入一个数组$arrNo中,
// 读取文件中的一条数据
// 检测该行中的学号在数组arrno中是否存在,如果不存在,写入二位数组$arr,并且把学号追加到arrNo中;如果存在则继续读取下一行
// 读取下一行...
$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']."该学号已存在".'
';
}else{
$arr[]=$row;
$arrNO[]=$row['no'];
}
if(count($arr)==1000){
$model->addAll($arr);
unset($arr);
}
}
if(count($arr)>0){
$model->addAll($arr);
}
$this->show('添加成功','utf8');
}
}
最终完整代码如下:
public function upload(){