我需要上传一个excel工作表并循环阅读以将数据保存到数据库中。我需要在我的自定义控制器方法中执行此操作。我使用的是multer,xlsx也是一样。
要上传excel的代码:
<form action="/file/upload" method="POST" encType="multipart/form-data">
<input type="file" name="file" accept="*.csv" />
<br/>
<br/>
<input type="submit" value="Submit" />
</form>
我必须在uploadData
的{{1}}方法中进行excel处理。下面是文件控制器中的代码:
FileController
具有如下定义的路线
var bodyParser = require('body-parser');
var multer = require('multer');
var xlstojson = require("xls-to-json-lc");
var xlsxtojson = require("xlsx-to-json-lc");
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './public/uploads/')
},
filename: function (req, file, cb) {
var datetimestamp = Date.now();
cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1])
}
});
var upload = multer({ //multer settings
storage: storage,
fileFilter: function (req, file, callback) { //file filter
if (['xls', 'xlsx'].indexOf(file.originalname.split('.')[file.originalname.split('.').length - 1]) === -1) {
return callback(new Error('Wrong extension type'));
}
callback(null, true);
}
}).single('file');
function uploadData(req, res) {
var exceltojson;
try {
upload(req, res, function (err) {
if (err) {
res.json({ error_code: 1, err_desc: err });
return;
}
/** Multer gives us file info in req.file object */
if (!req.file) {
res.json({ error_code: 1, err_desc: "No file passed" });
return;
}
/** Check the extension of the incoming file and
* use the appropriate module
*/
if (req.file.originalname.split('.')[req.file.originalname.split('.').length - 1] === 'xlsx') {
exceltojson = xlsxtojson;
} else {
exceltojson = xlstojson;
}
try {
exceltojson({
input: req.file.path,
output: null, //since we don't need output.json
lowerCaseHeaders: true
}, function (err, result) {
if (err) {
return res.json({ error_code: 1, err_desc: err, data: null });
}
res.json({ error_code: 0, err_desc: null, data: result });
});
} catch (e) {
res.json({ error_code: 1, err_desc: "Corupted excel file" });
}
})
}
catch (e) {
console.log(e);
}
}
它进入控制器中的'POST /file/upload': {
controller: 'v1/FileController',
action: 'uploadData'
},
方法,但突然退出。不知道我错过了什么,但最近几个小时都在挣扎。我检查了许多链接,但所有建议都执行uploadData
文件中的所有操作。我是Node的新手,正在尝试映射可用的示例以在控制器方法中进行操作。任何指针将不胜感激。