一.路由处处理
router.post('/upload',function (req,res) {
console.log("############# POST / UPLOAD ##############")
//fields 表示普通控件 files表示文件控件
let form = new formidable.IncomingForm();
form.encoding = 'utf-8'
form.parse(req, (err, fields, files) => {
let workbook = xlsx.parse(files.file.path)//node-xlsx模块的prase(路径)方法读取xlsx文件
console.log(workbook)
user.setXlsxData(workbook,res)
res.send('成功');
})
})
xlsx.parse处理后的格式
二.在dao层的user.setXlsxData处转成json(项目使用了分层结构)
static setXlsxData(req,resp){
// console.log(req)
let xlsxData=req
xlsxData=xlsxData[0].data
let inXlsxArr=[];
for (let i=1;i<xlsxData.length;i++){
if (xlsxData[i][0]!=0){
let xlsxObj={};
xlsxObj.id=xlsxData[i][0]
xlsxObj.username=xlsxData[i][1]
xlsxObj.password=xlsxData[i][2]
xlsxObj.head=xlsxData[i][3]||'1.jpg'
xlsxObj.address=xlsxData[i][4]
xlsxObj.sex=xlsxData[i][5]
xlsxObj.classes=xlsxData[i][6]
xlsxObj.type=xlsxData[i][7]
inXlsxArr.push(xlsxObj)
}
}
this.inXlsxData(inXlsxArr)
console.log('点击导入',inXlsxArr)
}
转换后的格式
三.在model层插入数据库
static inXlsxData(inXlsxArr){
return new Promise((resolve, reject)=>{
for (let i=0;i<inXlsxArr.length;i++){
let sql="insert into user (id,username,password,head,address,sex,classes,type) values("+inXlsxArr[i].id+", '"+inXlsxArr[i].username+"' , '"+inXlsxArr[i].password+"', '"+inXlsxArr[i].head+"',"+
"'"+inXlsxArr[i].address+"', '"+inXlsxArr[i].sex+"', '"+inXlsxArr[i].classes+"', '"+inXlsxArr[i].type+"')"
this.query(sql).then(result=>{
resolve(result)
}).catch(err=>{
reject(err)
})
}
})
}
备注:由于这也是自己做的功能,做的还不够完善,比如没有检测数据重复不让插入,还在完善中,其中node的express框架分层结构不够完美(太菜了),所以也只是记录了 xlsx转成json插入数据库大概思路。