thinkphp5上传文件
文章描述:
thinkphp5上传exl文件,并且把exl数据导入到数据库中
form表单
使用submit按钮提交表单
<form action="{:url('import/exl', '', '')}" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="file" name="file" id="file" class="file-ui" /></td>
</tr>
<tr>
<td>
<button type="submit" class="ui-button ui-button-success add edit">导入</button>
</td>
</tr>
</table>
</form>
ajax异步上传
<button type="button" class="ui-button ui-button-success add edit import_exl_button">导入</button>
$('.import_exl_button').on('click',function(){
var formData = new FormData();
if(!$('#file')[0].files[0]){
swal("OMG!", "请选择上传文件", "error")
return false
}
formData.append('file', $('#file')[0].files[0]);
//添加图片信息的参数
$.ajax( {
url: "{:url('import/exl', '', '')}",
type: 'POST',
dataType: "json",
async: false,
cache: false,
data: formData,
processData: false,
contentType: false,
success: function(data) {
if(data.code==200){
swal("Good!", data.msg, "success");
setTimeout(function(){
location.reload();
},3000)
}
},
error: function(data) {
}
})
})
php
上传
// 上传
public function upload(){
$ROOT_PATH = Env::get('root_path');
# 允许通过的文件名后缀
$allow_extexsion = [
'xls', 'xlsx'
];
if($_FILES["file"]["error"])
{
echo $_FILES["file"]["erroe"];
}
else
{
$extension=strtolower(pathinfo($_FILES["file"]["name"],PATHINFO_EXTENSION));//获取文件后缀
//控制上传的文件类型,大小
if(in_array($extension, $allow_extexsion))
{
// 注意更改接收字段
$file =request()->file('file');
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move($ROOT_PATH . 'public/uploads');
if($info){
$filename = $ROOT_PATH . 'public/uploads/' . $info->getSaveName();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
return $filename;
}
else
{
return (['code' => 101, 'msg' => '文件格式不正确']);
}
}
}
导入
// 导入exl
public function exl(){
// 获取上传地址
$filename = $this->upload();
// 获取文件后缀
$file_extension = pathinfo($filename, PATHINFO_EXTENSION);
//获取文件所在目录名
$new_path = $filename;
$objPHPExcel = new \PHPExcel();
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel); //设置保存版本格式
//实例化PHPExcel类
if ($file_extension == 'xlsx'){
$objReader=new \PHPExcel_Reader_Excel2007();
} else if ($file_extension == 'xls') {
$objReader = new \PHPExcel_Writer_Excel5();
}
$objPHPExcel = $objReader->load($new_path,$encode='utf-8');//获取excel文件
$sheet = $objPHPExcel->getSheet(0); //激活当前的表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$a = 0;
//将表格里面的数据循环到数组中
for($i=2;$i<=$highestRow;$i++)
{
//*为什么$i=2? (因为Excel表格第一行应该是标题,从第二行开始,才是我们要的数据。)
$data[$a]['themea'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//
$data[$a]['themeb'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();//
$data[$a]['themec'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();//
$data[$a]['username'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();// 姓名
// $data[$a]['validity'] = gmdate("Y-m-d H:i:s", \PHPExcel_Shared_Date::ExcelToPHP($objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue()));//有效期
$a++;
}
//往数据库添加数据
if(!empty($data)){
$res = Db::name('qd_user')->insertAll($data);
//echo Db::getLastSql();
if($res){
// echo $a.'条数据';
$url = '/admin.php/index/index';
exit( json_encode(['code'=>200, 'msg'=>'导入成功', 'url'=>$url]) );
}
}
}
发布时间:2022/12/06
发表评论