使用nodejs实现对浏览器上传excel并解析数据的实现
2017-03-31 15:10
344 查看
由于毕业设计的需要,需要实现一个上传excel 文件并且对excel 文件的数据解析存进数据库,所以在网上找了几天,自己写了一个方法来实现这一个功能,比较简单,主要是对nodejs的formidable和node-xlsx这两个模块的应用
首先,在网上查到文件的上传是不能用ajax的,所以我一开始就没打算用ajax来实现文件上传,但是后来又在网上看到有人使用formdata这种方式来实现ajax文件上传,但是本文没有采用这种方式,采用的是form表单来提交文件。具体的form参数应为
这里最主要的地方就是enctype的参数要改成“multipart/form-data”,另外 input输入框的type类型要改为 file,前端页面的主要配置就是上面代码所示。
对于后台nodejs来说,我们要用到两个nodejs的插件,一个是formidable,另外一个是node-xlsx。
先用npm下载这两个包之后,在文件中引入这两个模块。
我们写一个对excel数据解析的方法。它的API地址为点击打开链接,里面对方法的介绍不是很多,在这里我只解释文章出现的方法。
node_xlsx.parse(file)可以对buffer流或者excel文件解析,生成一个数组对象,excelObj[0]代表第excel中第一个表的数据,一次类型,如果excel中有多个表,可以依次拿取每个表的数据;在这里我们只拿第一个表的数据。
当我们页面实现文件的上传后,在后台直接实例化一个formidable对象,使用该对象的方法即可取得对文件的信息。
这样子就可以实现对excel文件的上传和数据处理了,只是对两个node模块的方法调用,比较简单,希望可以帮到你们。
首先,在网上查到文件的上传是不能用ajax的,所以我一开始就没打算用ajax来实现文件上传,但是后来又在网上看到有人使用formdata这种方式来实现ajax文件上传,但是本文没有采用这种方式,采用的是form表单来提交文件。具体的form参数应为
<form action="/student/fileupload" method="post" enctype='multipart/form-data'> <h4>上传学生信息excel:</h4> <input type="file"> <button type="submit">上传学生信息excel表</button> </form>
这里最主要的地方就是enctype的参数要改成“multipart/form-data”,另外 input输入框的type类型要改为 file,前端页面的主要配置就是上面代码所示。
对于后台nodejs来说,我们要用到两个nodejs的插件,一个是formidable,另外一个是node-xlsx。
先用npm下载这两个包之后,在文件中引入这两个模块。
//引入formidable来读取文件
var formidable = require('formidable'); //引入node-xlsx解析excel模块 var node_xlsx = require('node-xlsx');
我们写一个对excel数据解析的方法。它的API地址为点击打开链接,里面对方法的介绍不是很多,在这里我只解释文章出现的方法。
node_xlsx.parse(file)可以对buffer流或者excel文件解析,生成一个数组对象,excelObj[0]代表第excel中第一个表的数据,一次类型,如果excel中有多个表,可以依次拿取每个表的数据;在这里我们只拿第一个表的数据。
//对excel文件进行解析,读取数据 var ExcelParse = function(newPath){ var obj = node_xlsx.parse(newPath); var excelObj = obj[0].data;//取得第一个excel表的数据 //统计上传多少个学生信息 var num = 0; //定义student实体类数组 var stuArray = new Array('stuName','pid','sid','birth','sex','college','major','phone','address','cid'); //循环遍历表每一行的数据 for(var i=1;i<excelObj.length;i++){ var rdata = excelObj[i]; //将每一行的数据存进数据库中 var stu = new Student(); for(var j=0;j<rdata.length;j++){ stu.set(stuArray[j],rdata[j]); } var pwd = pwdMade(rdata[1]); stu.set('password',pwd); stu.save(function(err){ num++; if(err){ console.log("第"+num+"个学生信息出现错误!"); } }); } console.log("成功解析excel 数据并且存进相应数据库!"); };
当我们页面实现文件的上传后,在后台直接实例化一个formidable对象,使用该对象的方法即可取得对文件的信息。
var form = new formidable.IncomingForm(); form.encoding = 'utf-8'; form.uploadDir = path.join(__dirname,'../public/upload/stuUpload/'); form.keepExtensions = true;//保留后缀 form.maxFieldsSize = 2*1024*1024; form.parse(req,function(err,fields,files){ if(err){ console.log('文件上传错误!'); return ; } var filename = files.stu.name; // 对文件名进行处理,以应对上传同名文件的情况 var nameArray = filename.split('.'); var type = nameArray[nameArray.length-1]; var name = ''; for(var i=0; i<nameArray.length-1; i++){ name = name + nameArray[i]; } var date = new Date(); var time = '_' + date.getFullYear()+"_"+date.getMonth()+"_" +date.getDay()+"_" + date.getHours() +"_"+ date.getMinutes(); var avatarName = name + time + '.' + type; var newPath = form.uploadDir + avatarName ; console.log(newPath); fs.renameSync(files.stu.path, newPath); //重命名 console.log('重命名成功!'); //对excel文件进行解析读取数据 ExcelParse(newPath); res.render('student/studentInfoLoadDown'); });
这样子就可以实现对excel文件的上传和数据处理了,只是对两个node模块的方法调用,比较简单,希望可以帮到你们。
相关文章推荐
- Excel文件上传,解析,下载(一 文件上传,使用MultipartFile来实现)
- Node初学者入门,一本全面的NodeJS教程,微小的web框架,能实现文件上传功能以及数据解析功能
- 使用xlsx 实现纯前端的上传excel,并解析显示
- Excel实现上传 导入 解析Excel 页面展示Excel数据
- C#实现使用form上传Excel文件,导入Excel数据到SQL SERVER数据库
- 使用VB实现Excel自动获取外部数据
- struts2上传excel文件并解析数据插入数据库
- asp.net使用组件koogra读取Excel数据批量上传导入
- C# 上传excel文档解析出里面数据
- 使用MS ACCESS + MS EXCEL实现最简单的数据分析。
- 使用excel现成模板导出mysql数据到浏览器
- 利用POI读取Excel数据,实现同时读取多个Excel文件,兼容所有浏览器
- SilverLight学习笔记--使用WebClient实现通讯(一)(上传和下载字符串数据)
- 读取Excel的内容,实现数据批量上传
- Java使用POI实现数据导出excel报表
- asp.net使用组件koogra读取Excel数据批量上传导入
- 《JavaWeb---简单应用---练习JDBC,JSTL》---上传Excel文件,利用工具包解析,将数据储存到数据库中,可以查询删除
- 使用phpExcel实现Excel数据的导入导出(完全步骤)
- EXTJS4 Grid Filter 插件的使用 与后台数据解析------Extjs 查询筛选功能的实现
- ThinkPHP使用phpExcel实现Excel数据的导入导出