Nithin M D
Nithin M D

Reputation: 124

multiple file upload not working with formidable in node js

app.post('/upload', function (req, res) {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
      try{
        if (files.file.name != '') {
          file_newname = dt.MD5(files.file.name + Date() + Math.random()) + '.jpg' + ;
          var file_newpath = './tmp/' + file_newname;
          fs.readFile(file_oldpath, function (err, data) {

            // Write the file
            fs.writeFile(file_newpath, data, function (err) {
              console.log('File written!');
              res.end(JSON.stringify({             
                message: 'file uploaded successfully'
              }));
            });            

          });
        }
      }catch (e) {

      }
    });
  });

The single image upload is working perfectly.I tried the following code

var form = new formidable.IncomingForm();



files = [],
fields = [];
form.on('field', function(field, value) {
    fields.push([field, value]);
})
form.on('file', function(field, file) {
    console.log(file.name);
    files.push([field, file]);
})
form.on('end', function() {
    console.log('done');
    //res.redirect('/forms');
});
form.parse(req);

But only a single image gets uploaded. i m using react in frontend. Node and express in backend.

I also tried multer. But that doesnt working

app.post('/getrast', upload.array('files'), function (req, res) {

     res.json({data: req.files});
     });

Upvotes: 0

Views: 2417

Answers (1)

Juhil Somaiya
Juhil Somaiya

Reputation: 943

Use the multiple flag with the incoming form with true as value.

var form = new formidable.IncomingForm();

form.multiples = true; //use this while dealing with multiple files

files = [],
fields = [];
form.on('field', function(field, value) {
    fields.push([field, value]);
})
form.on('file', function(field, file) {

    fs.rename('add your logic here for renaming files'); // rename it here

    console.log(file.name);
    files.push([field, file]);
})
form.on('end', function() {
    console.log('done');
    //res.redirect('/forms');
});
form.parse(req);

Upvotes: 2

Related Questions