I am trying to upload two image files a database called cast using multer .I am taking the images as input from a form. I realized that some times it takes files from all the input fields but sometimes it accepts only one image file as input.
Can anybody please help me?Thank you in advance
adminUpload.ejs
<html>
<body>
<form class="uploadForm" method="post" action="/admin/postFile" enctype="multipart/form-data">
<label>Enter the name of the actor</label><br>
<input type="text" name="actor"><br>
<label class="control-label">Upload the image of the actor</label><br>
<input name="uplactor" type="file" class="file"><br>
<label>Enter the name of the actress</label><br>
<input type="text" name="actress"><br>
<label class="control-label">Upload the image of the actress</label><br>
<input name="uplactress" type="file" class="file"><br>
<input type="submit" value="submit" />
</form>
</body>
</html>
AdminRouter.js
const express = require('express')
const router = express.Router()
const controller=require('../Controller/Admin');
const multerFileUpload=require("../Models/Admin")
router.get('/postFile',(req,res)=>{
res.render('adminUpload.ejs');
})
var tempupload=multerFileUpload.upload.fields([
{name: 'uplactor',maxCount: 1},
{name: 'uplactress',maxCount: 1}])
router.post("/postFile",tempupload,controller.uploadDB)
module.exports=router;
Admin.js
const multer = require('multer');
const storage= multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname === 'uplactor'||file.fieldname === 'uplactress'||file.fieldname === 'director'||file.fieldname === 'uplSideCharacter') {
// if uploading cast photo
cb(null, 'public/cast_images')
}
else if(file.fieldname === 'uplTrailer'){
// else uploading trailer
cb(null, 'public/trailers')
}
else if(file.fieldname === 'uplMovie'){
// else uploading movie
cb(null, 'public/movies')
}
else if(file.fieldname === 'uplposter'){
// else uploading poster
cb(null, 'public/posters')
}
cb(null, 'public/posters');
},
filename: (req, file, cb) => {
cb(null, file.originalname)
}
});
const fileFilter = (req, file, cb) => {
if(file.fieldname === 'uplactor'||file.fieldname === 'uplactress'||file.fieldname === 'director'||file.fieldname === 'uplSideCharacter'||file.fieldname === 'uplposter'){
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('You can upload only image files!'));
}
else{
cb(null, true);
}
}
if(file.fieldname === 'uplMovie'||file.fieldname === 'uplTrailer'){
if (!file.originalname.match(/\.(mp4|mp3)$/)) {
return cb(new Error('You can upload only video files!'));
}
else{
cb(null, true);
}
}
};
exports.upload = multer({ storage:storage, fileFilter: fileFilter });
Admin.js(Controller file)
const Cast = require('../Models/Cast');
exports.uploadDB=async (req,res)=>{
try{
console.log(req.files)
console.log(req.files.uplactor[0])
console.log(req.files.uplactress[0])
const actor=new Cast({
name:req.body.actor,
image:req.files.uplactor[0].filename
})
const actress=new Cast({
name:req.body.actress,
image:req.files.uplactress[0].filename
})
await actor.save();
await actress.save();
res.statusCode = 200;
res.setHeader('Content-Type', 'application/json');
res.send("hello");
}catch(err){
res.send(err);
}
}
app.js
'use strict';
const express = require('express');
const http = require('http');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const AdminRouter = require('./Routes/AdminRoutes');
const mongoose = require('mongoose');
const app=express()
const server = http.createServer(app);
server.listen(3000, 'localhost', () => {
console.log('server running');
});
app.use(morgan('dev'));
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.set('views', 'views');
app.set('view engine', 'ejs');
app.use('/admin',AdminRouter);
//connection to mongodb
const url = 'mongodb://localhost:27017/Movie';
const connect = mongoose.connect(url, {useNewUrlParser : true, useUnifiedTopology: true } );
connect.then(() => {
console.log("Connected correctly to server");
}, (err) => { console.log(err); });
Cast.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CastSchema = new Schema({
name: {
type: String,
required: true,
unique: true
},
image: {
type: String,
required: true
}
})
const Cast = mongoose.model('Cast', CastSchema)
module.exports= Cast
