html代码:
<div class="layui-form-item">
<label class="layui-form-label">上传附件</label>
<div class="layui-input-block">
<button type="button" class="customer" onclick="import_cvs();">选择文件</button><a href="../../upload/excel/hd_new_retail/goods.csv" target="_blank" class="customer">模板下载(goods.csv)</a>
</div>
</div>
js异步代码:
function import_cvs(){
var input = $tag('input', {type: 'file'});
$(input).click().on('change', function () {
var file = this.files[0];
//文件判断
if (file.type != 'application/vnd.ms-excel' || file.name.match(/.csv$/).length < 0) {
alert('请导入csv文件');
return;
}
var in_action = $("select[name='in_action']").val();
//获取数据
var url = window.location.pathname + '?act=submit_import_goods';
var data = new FormData;
data.append('file', file);
data.append('in_action', in_action);
// console.log(url);
//发送ajax请求
$ajax(url, data, function (response) {
if (response.message == 'ok') {
window.parent.load_parent();//执行父页面的事件
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);//关闭当前页
} else {
alert(response.message)
}
})
});
}
ajax请求:
var canAjax = true;
/**
* ajax请求 ( 必须使用FormData )
* @param requestUrl
* @param formData
* @param callback
* @param progress
* @returns {boolean}
*/
function $ajax(requestUrl, formData, callback, progress) {
if (!canAjax) {
return false;
}
canAjax = false;
$.ajax({
url: requestUrl,
type: 'POST',
data: formData,
async:false,
dataType: 'json',
processData: false,
contentType: false,
success: function (data, textStatus) {
canAjax = true;
//console.log(data);
//console.log(textStatus);
if (typeof callback != 'undefined') {
callback(data);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
canAjax = true;
console.log(XMLHttpRequest);
console.log(textStatus);
console.log(errorThrown);
alert('系统出错:' + textStatus);
},
xhr: function () {
var xhr = new window.XMLHttpRequest();
if (typeof progress != 'undefined') {
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percent = parseInt(evt.loaded / evt.total * 100, 10);
progress(percent);
}
}, false);
}
return xhr;
}
});
}
创建input为file的标签:
**
* 创建html标签
* @param tagName
* @param attr
* @param append
* @returns {Element}
*/
function $tag(tagName, attr, append) {
var tag = document.createElement(tagName);
if (attr != undefined || !attr) {
$(tag).attr(attr);
}
if (append != undefined || !append) {
$(tag).append(append);
}
return tag;
}
后端php代码:
//提交导入数据
public function submit_import_goods(){
//获取数据
$file = $_FILES['file'];
$in_action = $_REQUEST['in_action'];
if ($file['type'] != 'application/vnd.ms-excel' || stripos($file, '.csv') === false) {
make_json_error('请上传正确的csv文件');
}
$handle = fopen($file['tmp_name'], 'r');
$field = $this->import_field;
$csv_arr = array();
$row = 1;
$goods_sn_arr = array();
while ($data = fgetcsv($handle)) {
$tmp_row = array();
$i = 0;
if ($row == 1) {
$row++;
continue;
}
//按照 数据库字段建立数组
foreach ($field as $k => $v) {
if($v == 'goods_sn' && !$data[$i]) break;
$data[$i] = $this->model->delChar($data[$i]);
@$tmp_row[$v] = trim(iconv('gbk', 'utf-8', $data[$i]));
// @$tmp_row[$v] = trim($data[$i]);
$i++;
}
$goods_sn_arr[] = $tmp_row['goods_sn'];
$tmp_row['in_action'] = $in_action;
$csv_arr[] = "("."'" . join("','", $tmp_row) . "'".")";
}
fclose($handle);
$csv_num = count($csv_arr);
if( $csv_num <= 0 ){
make_json_error('没有导入数据');
}
$sql = "select count(*) from hd_new_retail_goods where goods_sn in("."'" . join("','", $goods_sn_arr) . "'".")";
$count = $this->db->getOne($sql);
if($count == $csv_num){
make_json_error('没有导入数据!请检查商品列表已存在货号');
}
$sql = "insert IGNORE INTO hd_new_retail_goods(goods_sn,goods_name,in_action) values ".implode(",",$csv_arr);
$this->db->query($sql);
make_json_result('', 'ok');
}
//导入文件去掉特殊符号
public function delChar($str){
$str = str_replace("\t","",$str);
$str = str_replace("'",'',$str);
$str = str_replace('"','',$str);
$str = str_replace("\r\n","",$str);
$str = str_replace("\r","",$str);
$str = str_replace("\n","",$str);
$str = str_replace(array('<','>','br','/'),array(''),$str);
$str = str_replace(' ','',$str);
return $str;
}