express.js多文件上传回调

时间:2017-11-06 15:52:15

标签: javascript node.js express multipartform-data

我是node.js&的新手。 express.js,所以...我想上传多个文件,以后再使用它们。 但是我需要在所有文件保存到磁盘后发送响应(确定或错误状态),或者如果一个文件失败 - 然后发送错误回调。

现在我有了这样的代码:

var express = require('express');
var router = express.Router();

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();

var fs = require('fs');

router.post('/upload', multipartMiddleware, function(req, res) {
  var reqBody = req.body;
  var reqFiles = req.files;

  saveFile(reqFiles, 'main.xlsx', function(err) {
    if (err) {
      res.status(404).send('');
      return;
    }

    res.send('Multi-File File uploaded');
  }
});

function saveFile(file, name, callback) {
  fs.writeFile('./uploads/' + name, file, callback);
}

但是如何更改我的代码来解析它:

router.post('/upload', multipartMiddleware, function(req, res) {
  var reqBody = req.body;
  var reqFiles = req.files;

  saveFile(reqFiles['files'][0], 'main.xlsx', function(err) {
    if (err) {
      res.status(404).send('');
      return;
    }
  }
  saveFile(reqFiles['files'][1], 'second.xlsx', function(err) {
    if (err) {
      res.status(404).send('');
      return;
    }
  }

  res.send(''); // only after first two fileUploaders have finished
});

function saveFile(file, name, callback) {
  fs.writeFile('./uploads/' + name, file, callback);
}

2 个答案:

答案 0 :(得分:1)

您需要遍历req.files。您可以使用async库。

例如:

async.each(req.files, function(file, callback) {
  saveFile(file, file.name, callback)
}, function(err) {
  res.send('')
})

答案 1 :(得分:1)

  1. 模块建议不要使用它。直接使用multiparty模块。
  2. 当您拥有文件列表时,它们也会有文件名。你可以遍历这些并异步保存每个文件。然后回应。看一看here