Search code examples
node.jsformidable

Change folder name formidable to name sent in request


I want to upload files to a folder name specified in the request (in the name fields).

I had tried to add req.body.name but it is undefined.

Here is my code

var mongoose = require('mongoose');
var DataBase = require('../models/resource').DataBase;
var formidable = require('formidable'),
    http = require('http'),
    util = require('util');
var mkdirp = require('mkdirp');
var fs = require('fs');
exports.upload = function (req, res) {
var uploadDir = './uploads/databses/'+req.body.name; 
 mkdirp(uploadDir, function (err) {
    if (err) return cb(err);
  var form = new formidable.IncomingForm({ 
  uploadDir: uploadDir,
  keepExtensions: true
});
form.on('progress', function(bytesReceived, bytesExpected) {
    console.log(100 * bytesReceived / bytesExpected + '%');
});
form.parse(req, function(err, fields, files) {      
        res.writeHead(200, {
            'content-type': 'text/plain'
        });
        res.write('received upload:\n\n');
        res.end(util.inspect({
            fields: fields,
            files: files
        }));
    });

});
};

Any help please.


Solution

  • Solution i've found is that i move created folder to new one

            var uploadDir = './uploads/databses/temp/'; 
    
            var form = new formidable.IncomingForm({ 
            uploadDir=uploadDir,    
            keepExtensions: true
            });
            form.on('progress', function(bytesReceived, bytesExpected) {
            console.log(100 * bytesReceived / bytesExpected + '%');
            });
            form.parse(req)     
            .on('field', function(name, fields) {
            var body = JSON.parse(fields);
    
            uploadDir='./uploads/databses/'+body.nameOfFolder+'/';
            form.uploadDir=uploadDir; 
            }).on('file', function(name, files) {
            //moving temp to new folder
            mv('./uploads/databses/temp',  form.uploadDir, {mkdirp: true}, 
            function(err) {
    
            });
             res.end(util.inspect({
            files: files
            }));
            })
            .on('error', function(err) {
            next(err);
            })
            .on('end', function() {
            res.end();
            });