Uploading multiple files with multer, but from different fields? - node.js

How can I have multer accept files from multiple file type fields?
I have the following code that uploads a single file, using multer in node.js:
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './public/uploads');
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now());
}
});
var upload = multer({ storage : storage });
app.post('/rest/upload', upload.array('video', 1), function(req, res, next){
...
}
From the following form, on the condition only the video field has a value (if I specify both I get an 'Unexpected field' error):
<form action="/rest/upload" method="post" enctype="multipart/form-data">
<label>Video file: </label> <input type="file" name="video"/>
<label>Subtitles file: </label> <input type="file" name="subtitles"/>
<input type="submit"/>
</form>
It is not clear from the documentation how to approach this? Any suggestions would be appreciated. BTW I have tried the following parameter variations, without success:
app.post('/rest/upload', [upload.array('video', 1), upload.array('subtitles', 1)] ...
app.post('/rest/upload', upload.array('video', 1), upload.array('subtitles', 1), ...
app.post('/rest/upload', upload.array(['video', 'subtitles'], 1), ...

What you want is upload.fields():
app.post('/rest/upload',
upload.fields([{
name: 'video', maxCount: 1
}, {
name: 'subtitles', maxCount: 1
}]), function(req, res, next){
// ...
}

Using Multer Upload Files From Two Fields of Separate Forms on Different Pages
In this example I have two fields - resume and image. Resume in one form and Image in other. Both are on separate pages.
First import dependencies
const path = require('path'); // for getting file extension
const multer = require('multer'); // for uploading files
const uuidv4 = require('uuidv4'); // for naming files with random characters
Define fileStorage and fileFilter:
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => { // setting destination of uploading files
if (file.fieldname === "resume") { // if uploading resume
cb(null, 'resumes');
} else { // else uploading image
cb(null, 'images');
}
},
filename: (req, file, cb) => { // naming file
cb(null, file.fieldname+"-"+uuidv4()+path.extname(file.originalname));
}
});
const fileFilter = (req, file, cb) => {
if (file.fieldname === "resume") { // if uploading resume
if (
file.mimetype === 'application/pdf' ||
file.mimetype === 'application/msword' ||
file.mimetype === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
) { // check file type to be pdf, doc, or docx
cb(null, true);
} else {
cb(null, false); // else fails
}
} else { // else uploading image
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) { // check file type to be png, jpeg, or jpg
cb(null, true);
} else {
cb(null, false); // else fails
}
}
};
Middleware for multer
app.use(
multer(
{
storage: fileStorage,
limits:
{
fileSize:'2mb'
},
fileFilter: fileFilter
}
).fields(
[
{
name: 'resume',
maxCount: 1
},
{
name: 'image',
maxCount: 1
}
]
)
);
And then call your routes. You may need to add csrf protection or authentication along with this for security. But this should work fine.

If you want to upload multiple files/images from the same form, I have used the below code and it works fine. The path of the image is stored in the database; I will skip the database path and go straight to the upload function and how the fields are passed to the save function.
const path = require('path');
const multer = require('multer');
const storage = multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname === "profile") {
cb(null, './uploads/profiles/')
}
else if (file.fieldname === "natid") {
cb(null, './uploads/ids/');
}
else if (file.fieldname === "certificate") {
cb(null, './uploads/certificates/')
}
},
filename:(req,file,cb)=>{
if (file.fieldname === "profile") {
cb(null, file.fieldname+Date.now()+path.extname(file.originalname));
}
else if (file.fieldname === "natid") {
cb(null, file.fieldname+Date.now()+path.extname(file.originalname));
}
else if (file.fieldname === "certificate") {
cb(null, file.fieldname+Date.now()+path.extname(file.originalname));
}
}
});
const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 10
},
fileFilter: (req, file, cb) => {
checkFileType(file, cb);
}
}).fields(
[
{
name:'profile',
maxCount:1
},
{
name: 'natid', maxCount:1
},
{
name: 'certificate', maxCount:1
}
]
);
function checkFileType(file, cb) {
if (file.fieldname === "certificate") {
if (
file.mimetype === 'application/pdf' ||
file.mimetype === 'application/msword' ||
file.mimetype === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
) { // check file type to be pdf, doc, or docx
cb(null, true);
} else {
cb(null, false); // else fails
}
}
else if (file.fieldname === "natid" || file.fieldname === "profile") {
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'||
fiel.mimetype==='image/gif'
) { // check file type to be png, jpeg, or jpg
cb(null, true);
} else {
cb(null, false); // else fails
}
}
}
//at the save function
upload(req, res, (err) => {
if (err) {
console.log(err);
} else {
if (req.file == "undefined") {
console.log("No image selected!")
} else {
let datecreated = new Date();
let fullnames = req.body.firstname + ' ' + req.body.lastname;
let formatedphone = '';
let phone = req.body.personalphone;
if (phone.charAt(0) == '0') {
formatedphone = '+254' + phone.substring(1);
} else if ((phone.charAt(0) == '+') && (phone.length > 12 || phone.length <= 15)) {
formatedphone = phone
}
let teachers = {
"teacherid": teacherid,
"schoolcode": req.body.schoolcode,
"fullnames": fullnames,
"email": req.body.email,
"dateofbirth": req.body.dateofbirth,
"nationalid": req.body.nationalid,
"personalphone": formatedphone,
"profile": req.files.profile[0].path,
"natid": req.files.natid[0].path,
"certificate":req.files.certificate[0].path
}
connection.query('INSERT INTO teachers SET ?', teachers, (error, results, fields) => {`enter code here`
if (error) {
res.json({
status: false,
message: 'there are some error with query'
})
console.log(error);
} else {console.log("Saved successfully");
}

this worked for Me. complete example
var multer = require('multer')
var storage = multer.diskStorage({
destination: function(req, file, callback) {
callback(null, './public/audio');
},
filename: function(req, file, callback) {
console.log(file);
if(file.originalname.length>6)
callback(null, file.fieldname + '-' + Date.now() + file.originalname.substr(file.originalname.length-6,file.originalname.length));
else
callback(null, file.fieldname + '-' + Date.now() + file.originalname);
}
});
const upload = multer({ storage: storage });
router.post('/save/audio',upload.fields([{
name: 'audio', maxCount: 1
}, {
name: 'graphic', maxCount: 1
}]) ,(req, res) => {
const audioFile = req.files.audio[0];
const audioGraphic = req.files.graphic[0];
const fileName = req.body.title;
saveAudio(fileName,audioFile.filename,audioGraphic.filename,req.body.artist,function (error,success) {
req.flash('success','File Uploaded Successfully')
res.redirect('/')
});
})

Did you try to use multer().any()?

I just need upload fields store in a arry
const express = require("express");
const category_route = express();
const bodyParser = require('body-parser');
category_route.use(bodyParser.json());
category_route.use(bodyParser.urlencoded({extended:true}));
const controller = require('../Controller/Category');
const Multer = require('multer')
const Path = require('path');
const multer = require("multer");
category_route.use(express.static('public'));
 const storage = multer.diskStorage({
    destination : function(req,files,cb){
        cb(null,Path.join(__dirname,'../public/category'),function(err,sucess){
            if(err){
                throw err;
            }
        });
    },
    filename:function(req,files,cb){
        const name = Date.now()+'-'+ files.originalname;
        cb(null,name, function(err, sucess){
            if(err){
                throw err;
            }
        });
    } 
 });
 const upload = multer({storage:storage})
category_route.post('/add-category',upload.fields([
    {
      name: "icon",
      maxCount: 1,
    },
    {
      name: "banner",
      maxCount: 1,
    }
  ]), controller.addCategory);
module.exports = category_route;
/* controller code*/
const Category = require("../Model/Category");
const addCategory = async (req, res) => {
  try {
    var arrIcon = [];
    for(let i=0; i<req.files.length; i++){
      arrIcon[i] = req.files[i].filename;
    }
    var arrBanner = [];
    for(let j=0; j<req.files.length; j++){
      arrBanner[j] = req.files[j].filename;
    }
    const catData = await Category.find();
    
    if (catData.length > 0) {
      let checking = false;
      catData.every((i) => {
        if (i.name.toLowerCase() === req.body.name.toLowerCase()) {
          checking = true;
          console.log("FOUND");
          return false;
        }
        console.log("NOT-FOUND");
        return true;
      });
      if (checking === false) {
        const data = new Category({
          name: req.body.name,
          camission: req.body.camission,
          icon: arrIcon,
          banner: arrBanner,
          mtitel: req.body.mtitel,
          mdiscp: req.body.mdiscp,
        });
        const result = await data.save();
        res.send(result);
      } else {
        res.send("Category is Already exieet");
      }
    } else {
      const data = new Category({
        name: req.body.name,
        camission: req.body.camission,
        icon: arrIcon,
        banner: arrBanner,
        mtitel: req.body.mtitel,
        mdiscp: req.body.mdiscp,
      });
      const result = await data.save();
      res.send(result);
    }
  } catch (error) {
    console.log(error);
    res.send("somthing Wrong");
  }
};
module.exports = { addCategory };

upload(req, res, (err) => {
if (err) {
console.log(err);
} else {
if (req.file == "undefined") {
console.log("No image selected!")
} else {
let datecreated = new Date();
let fullnames = req.body.firstname + ' ' + req.body.lastname;
let formatedphone = '';
let phone = req.body.personalphone;
if (phone.charAt(0) == '0') {
formatedphone = '+254' + phone.substring(1);
} else if ((phone.charAt(0) == '+') && (phone.length > 12 || phone.length <= 15)) {
formatedphone = phone
}
let teachers = {
"teacherid": teacherid,
"schoolcode": req.body.schoolcode,
"fullnames": fullnames,
"email": req.body.email,
"dateofbirth": req.body.dateofbirth,
"nationalid": req.body.nationalid,
"personalphone": formatedphone,
"profile": req.files.profile[0].path,
"natid": req.files.natid[0].path,
"certificate":req.files.certificate[0].path
}
connection.query('INSERT INTO teachers SET ?', teachers, (error, results, fields) => {
if (error) {
res.json({
status: false,
message: 'there are some error with query'
})
console.log(error);
} else {
console.log('Saved successfully');}

Related

Not able to upload files through multer

const multer = require('multer');
// Define file storage
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads');
},
filename: function (req, file, cb) {
cb(
null,
new Date().toISOString().replace(/:/g, '-') + '-' + file.originalname
);
},
});
// Specify file format that can be saved
function fileFilter(req, file, cb) {
if (
file.mimetype === 'image/png' ||
file.mimetype === 'image/jpg' ||
file.mimetype === 'image/jpeg'
) {
cb(null, true);
} else {
cb(null, false);
}
}
const upload = multer({ storage, fileFilter });
// File Size Formatter
const fileSizeFormatter = (bytes, decimal) => {
if (bytes === 0) {
return '0 Bytes';
}
const dm = decimal || 2;
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'YB', 'ZB'];
const index = Math.floor(Math.log(bytes) / Math.log(1000));
return (
parseFloat((bytes / Math.pow(1000, index)).toFixed(dm)) + ' ' + sizes[index]
);
};
module.exports = { upload, fileSizeFormatter };

impossible to upload images from multiple forms on multiple pages with multer , express and react

I try to uploads files with multer, express and react. I succeeded for my first controller the image and well stocked but for the second the storage in String works on MongoDb but not on the back.
The code that works:
// controller file //
module.exports.createChantier = async (req, res) => {
const newChantier = new ChantierModel({
nomDuSite: req.body.nomDuSite,
client: req.body.client,
collaborateur: req.body.collaborateur,
date: req.body.date,
adresseDuSite: req.body.adresseDuSite,
proceder: req.body.proceder,
imageSite:
req.files !== null
? "./uploads/" +
req.body.nomDuSite.split(" ").join("_") +
"_" +
"imageSite" +
".jpg"
: "null",
suivie: [],
devis: req.body.devis,
surfaceCourante: req.body.surfaceCourante,
surfaceLineaire: req.body.surfaceLineaire,
});
try {
const chantier = await newChantier.save();
return res.status(201).json(chantier);
} catch (err) {
return res.status(400).send(err);
}
};
// input for forms //
<label htmlFor="imageSite">Photo du site</label>
<input
type="file"
id="imageSite"
name="imageSite"
accept=".jpg"
onChange={(e) => handlePictureImageSite(e)}
/>
<img src={postImageSite} alt="rapportpic" />
// multer file //
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "client/public/uploads");
},
filename: function (req, file, cb) {
const fileName =
req.body.nomDuSite.split(" ").join("_") + "_" + file.fieldname;
cb(null, fileName + ".jpg");
},
});
const fileFilter = (req, file, cb) => {
if (
file.mimetype == "image/png" ||
file.mimetype == "image/jpeg" ||
file.mimetype == "image/jpg"
) {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = multer({
storage: storage,
fileFilter: fileFilter,
}).fields([{ name: "imageSite", maxCount: 1 }]);
when I use this code all works MongoDb stores the path in string and multer registers the picture in a public folder.
The code that doesn't work:
// controller that does not work //
module.exports.createSuivieChantier = (req, res) => {
if (!ObjectID.isValid(req.params.id))
return res.status(400).send("ID unknow : " + req.params.id);
try {
return ChantierModel.findByIdAndUpdate(
req.params.id,
{
$push: {
suivie: {
suivieId: req.body.suivieId,
suivieReperage: req.body.suivieReperage,
commentaireSuivie: req.body.commentaireSuivie,
suivieSurfaceCourante: req.body.suivieSurfaceCourante,
suivieSurfaceLineaire: req.body.suivieSurfaceLineaire,
////////////////////
suiviePhoto1:
req.files !== null
? "./uploads/" +
req.body.suivieReperage +
"_" +
"suiviePhoto1" +
".jpg"
: "",
suiviePhoto2:
"./uploads/" +
req.body.suivieReperage +
"_" +
"suiviePhoto2" +
".jpg",
suiviePhoto3:
"./uploads/" +
req.body.suivieReperage +
"_" +
"suiviePhoto3" +
".jpg",
suiviePhoto4:
"./uploads/" +
req.body.suivieReperage +
"_" +
"suiviePhoto4" +
".jpg",
/////
},
},
},
{ new: true },
(err, docs) => {
if (!err) return res.send(docs);
else return res.status(400).send(err.message);
}
);
} catch (err) {
return res.status(400).send(err);
}
};
// input for forms ///
<label htmlFor="suiviePhoto1">Photo 1</label>
<input
type="file"
id="suiviePhoto1"
name="suiviePhoto1"
accept=".jpg"
onChange={(e) => handleSuiviePhoto1(e)}
/>
<img src={PostSuiviePhoto1} alt="rapportpic" />
// multer file //
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "client/public/uploads");
},
filename: function (req, file, cb) {
const fileName =
req.body.suivieReperage.split(" ").join("_") + "_" + file.fieldname;
cb(null, fileName + ".jpg");
},
});
const fileFilter = (req, file, cb) => {
if (
file.mimetype == "image/png" ||
file.mimetype == "image/jpeg" ||
file.mimetype == "image/jpg"
) {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = multer({
storage: storage,
fileFilter: fileFilter,
}).fields([
{ name: "suiviePhoto1", maxCount: 1 },
{ name: "suiviePhoto2", maxCount: 1 },
{ name: "suiviePhoto3", maxCount: 1 },
{ name: "suiviePhoto4", maxCount: 1 },
]);
// router file //
const router = require("express").Router();
const chantierController = require("../controllers/chantier.controller");
const uploadChantierFront = require("../config/uploadFile/chantierFront.upload");
const suivieChantierUpload = require("../config/uploadFile/suivieChantier.upload");
router.get("/", chantierController.readAllChantier);
router.get("/:id", chantierController.readChantier);
router.post("/", uploadChantierFront, chantierController.createChantier);
router.put("/:id", chantierController.updateChantier);
router.delete("/:id", chantierController.deleteChantier);
/////////////////// ROUTES SUIVIE CHANTIER
router.patch(
"/create-suivie/:id",
suivieChantierUpload,
chantierController.createSuivieChantier
);
router.patch("/edit-suivie/:id", chantierController.updateSuivieChantier);
router.patch("/delete-suivie/:id", chantierController.deleteSuivieChantier);
module.exports = router;
I think the problem comes from the multer file but it is identical to the file that works.(multer v 1.4.4)

Send image from form-data and JSON data from postman for node js

Problem
How I received the image and JSON data from the postman in node js API? When I send the image from form-data and also send the JSON data only one received. If the image is shown in the request then JSON data not received and validation error occurred.
How I handle this case? Make separate API for image upload. What is the best way todo this
account.js
const express = require('express');
const multer = require('multer');
const { constants } = require('../helpers/contants');
const { commonValidation } = require('../validation/commonValidation');
const { validation } = require('../middleware/validation');
const crypto = require("crypto");
const {
updateProfile,
} = require('../controllers/account');
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, `public/${constants.imageDir}`)
},
filename: async (req, file, callback) => {
var filetype = '';
if(file.mimetype === 'image/jpg') {
filetype = 'gif';
}
if(file.mimetype === 'image/png') {
filetype = 'png';
}
if(file.mimetype === 'image/jpeg') {
filetype = 'jpg';
}
callback(null, 'image-' + crypto.randomBytes(3).toString('hex') + '-' +
Date.now() + '.' + filetype);
}
})
var upload = multer({ storage: storage,fileFilter: (req, file, callback) => {
if (file.mimetype == "image/png" || file.mimetype == "image/jpg" ||
file.mimetype == "image/jpeg") {
callback(null, true);
} else {
callback(null, false);
return callback(new Error('Only .png, .jpg and .jpeg format allowed!'));
}
} });
const router = express.Router({ mergeParams: true });
router.use(upload.single('image'));
router.use((req, res, next) => {
if (!Array.isArray(req.image)) {
req.image = []
}
req.body = req.body.request
if (req.file) {
//set the avatar in req to get the image name in updateProfile controller
req.body.avatar = req.file.filename;
req.image.push(req.file.filename)
}
return next()
})
router
.patch('/', [commonValidation('updateProfile')], validation, updateProfile)
module.exports = router;
commonValidation
exports.commonValidation = (method) => {
switch (method) {
case 'updateProfile': {
return [
check('name', 'Name is required').not().isEmpty().trim().escape(),
]
}
}
validation
const { validationResult } = require('express-validator');
module.exports.validation = (req, res, next) => {
const errors = validationResult(req)
if (errors.isEmpty()) {
return next()
}
// err.message = 'ValidationError';
const extractedErrors = []
errors.array({ onlyFirstError: true }).map((err) => extractedErrors.push({
[err.param]: err.msg }))
next(extractedErrors);
}
account
exports.updateProfile = asyncHandler(async (req, res, next) => {
if(typeof req.body.avatar !== 'undefined'){
const oldImage = await User.findById(req.user._id);
//oldImage.avatar exist then delete the previous image from directory
if(oldImage.avatar){
deleteImageFromFolder('images',oldImage.avatar)
}
}
const user = await User.findByIdAndUpdate(req.user._id, req.body, {
new: true,
runValidators: true
});
const profile = user.getProfile();
res.status(200).json({
success: true,
data: profile
});
});
postman
In this below image JSON data and image received but the validation error occurs

Multer - Stop File Uploading If Form Validation Fails

i have mixed form with file upload and normal form fields, and while sending this form to Nodejs server i am validating form but problem is that i do not know how to stop uploading the file if (for example) one of the form field is empty.
so for example:
if(name.trim().length < 1){
//stop uploading of file
return res.status(409).send({
message: 'provide name'
})
}
how can i do that (Multer & ExpressJS)?
I was using following code in my case (node & express).
From routes.js file I am calling this insertRating method. like below
//routes.js
router.post('/common/insertrating',RatingService.insertRating);
//controller class
// storage & upload are configurations
var storage = multer.diskStorage({
destination: function (req, file, cb) {
var dateObj = new Date();
var month = dateObj.getUTCMonth() + 1; //months from 1-12
var year = dateObj.getUTCFullYear();
console.log("month and yeare are " + month + " year " + year);
var quarterMonth = "";
var quarterYear = "";
var dir_path = '../../uploads/' + year + '/' + quarterMonth;
mkdirp(dir_path, function (err) {
if (err) {
console.log("error is cominggg insidee");
}
else {
console.log("folder is createtd ")
}
cb(null, '../../uploads/' + year + '/' + quarterMonth)
})
console.log("incomingggg to destination");
},
filename: function (req, file, cb) {
console.log("incoming to filename")
cb(null, Date.now() + "_" + file.originalname);
},
});
var upload = multer({
storage: storage,
limits: {
fileSize: 1048576 * 5
},
fileFilter: function (req, file, callback) {
var ext = path.extname(file.originalname);
ext = ext.toLowerCase();
console.log("ext isss " + ext);
if (ext !== '.png' && ext !== '.jpg' && ext !== '.jpeg' && ext !== '.pdf' && ext !== '.txt'
&& ext !== '.doc' && ext !== '.docx' && ext !== '.xlsx' && ext !== '.xls'
) {
return callback(new Error('Only specific extensions are allowed'))
}
callback(null, true)
}
}).array('files', 5);
// calling below insertRating method from routes js file...
exports.insertRating = async function (req, res) {
let quarterData = req.query.quarterData;
quarterData = JSON.parse(quarterData);
if (quarterData != null) { // here you can check your custom condition like name.trim().length
req.files = []; // not required
upload(req, res, async function (err) { // calling upload
if (err) {
res.send("error is cominggg")
return;
} else {
res.send("file is uploaded");
}
//
});
}
else {
res.send("filed must not be empty");
}
}
You can simply throw error:
in express::
app.get("/upload-image", multterUpload.single("image"), (req, res, next)=>{
try{
if(name.trim().length < 1) {
throw new Error("name length is not valid");
//or
return res.status(409).json({msg: "failed"});
}
// you all operation ....
res.status(200).json({msg: "success"});
}cathc(e=>{
next(e)
});
})
this is something you can do or you can return something else instead of throwing an error.

How to have multiple file names while uploading with multer

My code is as shown below:
const multer = require('multer');
let upload = multer();
let profile_image = '';
const storage = multer.diskStorage({
destination(req, file, callback) {
callback(null, './public/images')
},
filename(req, file, callback) {
profile_image = `${file.fieldname}-${Date.now()}${path.extname(file.originalname)}`;
callback(null, profile_image);
}
});
const userData = (req, res) => {
upload = multer({
limits: {
fileSize: 1000000,
files: 2
},
storage,
fileFilter(req, file, callback) {
const ext = path.extname(file.originalname);
if (ext !== '.png' && ext !== '.jpg' && ext !== '.gif' && ext !== '.jpeg') {
return callback(res.end('Only images are allowed'), null)
}
callback(null, true);
}
}).any();
upload(req, res, err => {
const foodtruck_name = req.body.foodtruck_name;
const foodtruck_tag = req.body.foodtruck_tag;
console.log(`foodname${foodtruck_name}`);
console.log("error" + err);
console.log("profile image" + profile_image);
if ((!foodtruck_name) || (foodtruck_name.trim() == '')) {
console.log("fooddddname " + foodtruck_name);
res.json({
status: '404',
message: 'Please enter valid foodtruck name'
});
} else {
const truck = new foodTruck();
truck.foodtruck_name = foodtruck_name,
truck.foodtruck_tag = foodtruck_tag,
awsUpload.fileUpload(profile_image).then((result) => {
truck.foodtruck_img = "https://myWebsite.com/" +
profile_image;
awsUpload.fileUpload(profile_image).then((result) => {
truck.foodtruck_logo = "https://myWebsite.com/" +
profile_image;
truck.save((err, trucSaved) => {
res.json({
status: '200',
message: 'Thanks for registering with quflip',
data: trucSaved
});
});
}).catch((errMsg) => {
res.json({
status: '400',
message: errMsg
})
});
}).catch((errMsg) => {
res.json({
status: '400',
message: errMsg
})
});
}
});
};
Here, I am able to upload multiple images successfully , but I am not able to get the names for each individual file while uploading. how can I have them inside upload(req, res, err => { function?

Resources