前端导入插件:webuploader
webuploader使用:使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF。
其中css文件、js文件均可以根据需求修改
下载地址:https://github.com/fex-team/webuploader/releases
前端js:
function importExcel() {
var tabId = '';
var code = '';
var uploader = WebUploader.create({
auto: true,
/*formData: { //设置传递的参数
page: pageName(),
code: 'OPFS_RuleArp_Import',
tabId: ''
},*/
server: 'taskDispatch.php', //后台处理
swf: 'assets/plugins/webUploader/Uploader.swf', //swf文件路径
pick: { //选择文件的按钮
id:'#picker',
multiple: false
},
resize: false, //是否压缩
accept: { //上传的文件类型
title: 'Applications',
extensions: 'xls',
mimeTypes: 'application/xls'
},
fileNumLimit: 1,
fileSingleSizeLimit: 10485760,
duplicate: true //重复上传
});
uploader.on( 'uploadBeforeSend', function(file, data) { //上传开始前
var tabId = ''; //tab选项卡
$(".tab-content div").each(function () {
if($(this).hasClass('active')) {
tabId = $(this).attr('id');
}
});
var code = '';
if (tabId == 'IP黑名单') {
code="OPFS_RuleIpBl_Import";
}
if (tabId == 'IP用户自定义') {
code="OPFS_RuleIpAu_Import";
}
// 修改data可以控制发送哪些携带数据。
data.tabId = tabId;
data.code = code;
data.page = pageName();
});
var $list = $("#thelist");
uploader.on( 'fileQueued', function(file) { //上传文件队列
document.getElementById('fileAddr').value = file.name;
$list.append( '<div id="' + file.id + '" class="item">' +
'<p class="state" style="font-size: 14px; text-align: center">等待上传...</p>' +
'</div>' );
$('#closeBtn').attr('disabled',"true");
uploader.disable(); //上传过程中,不可再次点击上传
});
uploader.on("uploadAccept", function( file, data) { //返回是否成功上传,需要在后台给出上传成功与否的标记
if (data[0] == 0) {
// for(var j=1, len = data.length; j<len; j++)
mizhu.alert('提示', data[1]);
return false;
} else{
return true;
}
});
// 文件上传过程中创建进度条实时显示。
uploader.on('uploadProgress', function( file, percentage ) { //进度条函数
var $li = $('#'+file.id ),
$percent = $li.find('.progress .progress-bar');
// 避免重复创建
if (!$percent.length) {
$percent = $('<div class="progress progress-striped active">' +
'<div class="progress-bar" role="progressbar" style="width: 0%">' +
'</div>' +
'</div>').appendTo( $li ).find('.progress-bar');
}
$('#'+file.id).find('p.state').text('上传中');
$percent.css( 'width', percentage*100 + '%' );
console.log(percentage);
});
uploader.on( 'uploadSuccess', function(file) { //上传成功的回调函数
var tabId = '';
$(".tab-content div").each(function () {
if($(this).hasClass('active')) {
tabId = $(this).attr('id');
}
});
$('#'+file.id).find('p.state').text('已完成');
if (tabId == 'IP黑名单') {
refreshBl();
}
if (tabId == 'IP用户自定义') {
refreshUser();
}
});
uploader.on( 'uploadError', function(file) {
$('#'+file.id).find('p.state').text('上传出错');
});
// 完成上传完了,成功或者失败,先删除进度条。
uploader.on('uploadComplete', function (file) {
$('#' + file.id).find('.progress').fadeOut();
setTimeout(function () {
$('#'+file.id).find('p.state').fadeOut();
},3000);
$('#closeBtn').removeAttr("disabled");
});
$("#closeBtn").click(function () {
uploader.destroy();
});
}
php处理函数
function importExcel($db_keys) { //$db_keys是数据库中表格的列
$len = count($db_keys);
$filename = $_FILES['file']['name'];// 文件名
$tmp_name = $_FILES['file']['tmp_name']; //临时文件路径
$extend = strrchr ($filename,'.');
$extendLower = strtolower($extend); //文件后缀
/*判别是不是.xls文件*/
if ($extendLower != ".xls")
{
echo '不是.xls文件,请重新上传!';
exit;
}
//文件存放的路径
if (!move_uploaded_file($tmp_name, PATH_IMPORT.$filename)) {
$error = "error|上传文件错误.";
exit(0);
}
//获取上传表格的数据
$file_path = PATH_IMPORT.$filename; //自行设置PATH_IMPORT
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objPHPExcel = $objReader->load($file_path );
$sheet = $objPHPExcel->getSheet();
$highestRow = $sheet->getHighestDataRow(); // 取得总行数
$highestColumn_num = PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); //列数
$columns = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O');
$column_name = array();
$title = $sheet->getTitle(); //获取sheet名
$arr_result = array();
$dealer_element = array();
$data = array();
//在$arr_result的第一个位置放置标志字段,1成功执行,0上传错误
$arr_result[] = 1;
$dealer_element[0] = 1;
for ($j = 2, $i=1; $j <= $highestRow; $j++, $i++) {
for ($k = 0; $k < $highestColumn_num; $k++) {
//读取单元格
$value = $objPHPExcel->getActiveSheet()->getCell($columns[$k] . $j)->getValue();//这个就是获取每个单元格的值
// $value = trim($value);
if (empty($value)) {
$value = NULL;
}
$data[$db_keys[$k]] = $value; //$data键值对数组
$arr_result[$j - 1] = $data; //$arr_result是下标数组
}
//此处可进行数据验证
}
return $arr_result;
}
xls文件中的数据已经存储在 $arr_result中了,只需要调用插入函数即可。