image.png
旧工厂改造的园区中的旧设备
近期有人给我提了个简单的需求,上传一个excel表格。于是简单的用 express实现了一下这个功能的基本代码。
通常情况下上传表格的基本逻辑是:先上传文件,然后遍历表格文件中的数据插入到数据库中。
我这里简单的实现了上传的功能,主要用到了两个npm的包:
Multer是一个node.js中间件,用于处理多部分/表单数据,主要用于上传文件。
xlsx 是SheetJS社区版提供久经考验的开源解决方案,可以从几乎任何复杂的电子表格中提取有用的数据,并生成新的电子表格,这些电子表格可以与传统和现代软件一起使用。
我这里的场景主要是要上传表格,所以用了xlsx,如果你需要上传图片或者其他的内容,你可以将图片转为base64字符串,或者如果你有云存储空间的话,可以存到云存储上。
具体的实现过程也非常简单:
file.js
模块:var express = require('express');
var router = express.Router();
const fileModule = require('../modules/file')
const multer = require('multer')
const upload = multer()
/* uploadExcel */
router.post('/uploadExcel', upload.single('file'), function (req, res, next) {
fileModule.uploadExcel(req, res)
});
module.exports = router;
fileModule
中的uploadExcel
即可var xlsx = require("xlsx");
module.exports = {
uploadExcel(req, res) {
console.log('req.file---->', req.file)
// console.log('req, res', res)
let data = {
code: 200,
msg: 'success'
}
// 解析excel文件
const workbook = xlsx.read(req.file.buffer, {
type: "buffer"
})
const sheet = workbook.Sheets[workbook.SheetNames[0]] // 选择第一个工作簿
const result = xlsx.utils.sheet_to_json(sheet)
console.log('result', result)
}
}
在uploadExcel
的响应参数中,我们可以获取到具体的文件对象,以及它内部的buffer
数据,然后通过xlsx
作进一步的转化,得到我们想要的数据。
var mysql = require('mysql')
const pool = mysql.createPool(config.mysql);
pool.on('connection', (connnection) => {
connnection.query('SET SESSION auto_increment_increment=1')
})
pool.getConnection((err, conn) => {
if (err) {
data.code = 401;
data.msg = '连接错误';
res.send(data);
return;
}
// 插入操作
// 连接不需要使用时,使用该方法将其归还到连接池中
conn.release();
})
以上就是express 上传excel文件的基本过程。
本文分享自 JavaScript高级程序设计 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!