我正在使用快速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,文件记录到控制台时清空数组。知道为什么会这样吗?
我真的很感激任何帮助。谢谢!
multer不工作的原因是因为express-fileupload已经被用作文件上传的中间件,所以注释掉这一行:
app.use(fileUpload())
为我解决了这个问题。
这是来自multer doc:
Multer接受一个选项对象,其中最基本的是dest属性,它告诉Multer上传文件的位置。如果省略options对象,文件将保留在内存中,永远不会写入磁盘。
这意味着你需要至少定义dest
选项:
var upload = multer({ dest: 'uploads/' });