在NodeJs中上传和读取Excel文件

时间:2019-03-03 09:13:12

标签: node.js multer

我需要上传一个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的新手,正在尝试映射可用的示例以在控制器方法中进行操作。任何指针将不胜感激。

0 个答案:

没有答案