带有multer的快速js上的多个文件上传返回空数组

时间:2018-01-04 18:17:33

标签: javascript node.js express file-upload multer

我正在使用快速js在Glitch上构建应用程序,这需要用户上传多个文件。这是我的代码:

  var express = require('express');
var cors= require('cors');
var bodyParser= require('body-parser');
var contexts= require('./contexts');
var path= require('path');
var fileUpload= require('express-fileupload');
var multer= require('multer');
var upload = multer();

var app = express();

app.use(cors());
app.use(bodyParser.json());
app.use(fileUpload());

app.set('view engine', 'ejs');
app.set('views', 'views');
app.use(express.static('views/'));
//here express-fileuploads works fine
app.post('/getcontexts', function (req,res) {
   var context=contexts.get(req.files.file.data.toString());
   res.render('rast', {length: context.length, content : context});    
     });

//this is when I get an empty array 
   app.post('/getrast', upload.array('rastfiles'), function (req, res) {
  
     res.json({data: req.files});
     });

   var listener = app.listen(process.env.PORT, function () {
    console.log('SERVER STARTED ON PORT ' + listener.address().port);
   });

这是我使用的ejs表单:

        <form action="/getrast" method="POST" enctype="multipart/form-data">
        <label for="rastfiles">Please select your Rast genome files with .txt extension</label>
        <br>
        <input type="file" id="file" name="rastfiles" class="inputFile" multiple>
        <br>
        <input type="submit" value="Run" id="sub">
      </form>

我已经使用express-fileupload上传单个文件,但它运行得很好。但是,当我使用multer上传多个文件时,我会在将req,文件记录到控制台时清空数组。知道为什么会这样吗?

我真的很感激任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

multer无法正常工作的原因是因为express-fileupload已被用作文件上传的中间件,所以注释掉这一行:

  app.use(fileUpload())

为我解决了这个问题。

答案 1 :(得分:0)

这是来自multer doc:

  

Multer接受一个选项对象,其中最基本的是dest   属性,告诉Multer上传文件的位置。 如果你   省略选项对象,文件将保留在内存中,永远不会   写入磁盘。

这意味着您需要定义至少dest选项:

var upload = multer({ dest: 'uploads/' });