Hi I am have completed FreeCodeCamp’s File-metadata microservice project . But after fulfilling the user stories, I wanted to try implementing the multiple files uploading function of multer. However I am stuck at understanding one particular phenomenon.
I observed something: If I have two multer’s upload functions (namely upload.single() and upload.array()) mounted to the same path (’/’ in this case), the second one won’t work.
Here is my app.js.
var multer = require('multer')
var express = require('express')
var path = require('path')
var bodyParser = require('body-parser')
var app = express()
var port = 3000
var result = new Array()
app.use(bodyParser.json())
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res){
res.sendFile(path.join(__dirname, 'views/index.html'));
})
/*----------------------------Multer--------------------------------*/
var storage = multer.diskStorage({
destination: function(req, file, callback){
callback(null, 'storage/');
},
filename: function(req, file, callback){
callback(null, new Date() + "-" + file.fieldname)
}
});
var upload = multer({storage: storage})
app.post('/', upload.array('files', 4), function(req, res){
console.log(req.files);
for(var i = 0; i < req.files.length; i++){
result[i] = { "name": "item " + i,"size" : req.files[i].size }
}
res.redirect('/collectionsize')
})
app.post('/', upload.single('myFile'), function(req, res){
console.log(req.file);
result = { "size" : req.file.size }
res.redirect('/filesize');
})
app.get('/filesize', function(req, res){
res.json(result)
})
app.get('/collectionsize', function(req, res){
res.json(result)
})
/*----------------------------Multer--------------------------------*/
var server = app.listen(process.env.PORT || port, function(){
console.log("Server listening on port " + ((process.env.PORT)? process.env.PORT : port))
})
Here is my index.html
<!DOCTYPE html>
<!-- Name: Darius He Xing-->
<html>
<head>
<title>File Metadata Project</title>
</head>
<body>
<form id='myForm' name='myForm' enctype='multipart/form-data' method='post'>
<input type="file" name="myFile" />
<input id="myButton" type="submit" name="submit" >
</form>
<form id='Form2' name='Form2' enctype='multipart/form-data' method='post'>
<input type="file" name="files" />
<input type="file" name="files" />
<input id="myButton" type="submit" name="submit" >
</form>
<p>This is a mini web app that tells you how big your uploaded file is.</p>
</body>
</html>
How is it so? Any idea how I can remedy this?