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

问题描述 投票:2回答:2

我正在使用快速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,文件记录到控制台时清空数组。知道为什么会这样吗?

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

javascript node.js express file-upload multer
2个回答
1
投票

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

  app.use(fileUpload())

为我解决了这个问题。


0
投票

这是来自multer doc:

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

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

var upload = multer({ dest: 'uploads/' });
© www.soinside.com 2019 - 2024. All rights reserved.