2016-07-29 69 views
0

我想将文件上传到应该从用户提交的表单数据中获取的文件夹中。这是req.body.coursename如何在nodejs中使用multer动态创建文件上传的用户定义文件夹?

/*conditions for directory check*/ 
var isvalidate = function (data) { 
    var data = data; 
    var dir = '../uploads'+'/'+data; 
    if (!fs.existsSync(dir)) { 
     fs.mkdirSync(dir); 
     return dir; 
    } else { 
     return dir; 
    } 
}; 

/*multer*/ 

var date = moment().format('YYYY-MM-DD'); 
var storage = multer.diskStorage ({ 
    destination: function (req, file, callback) { 
     console.log("filename upload",file.originalname); 
     callback(null, isvalidate(req.body.coursename)); 
    }, 
    filename: function (req, file, callback) { 
     //console.log("filename upload",file.originalname); 
     callback(null, date+ '-' +file.originalname); 
    } 
}); 
var data = multer({ storage : storage }).any(); 

/*file upload*/ 

router.post('/create',function(req, res) { 
    console.log(req.body); 
    data(req, res, function(err) { 
     console.log(req.body); 
     //isvalidate (req.body.coursename); 
     if (err) { 
      res.json({error_code:1,err_desc:err}); 
      return; 
     }   
    }); 
}); 

如何创建一个名为req.body.coursename文件上传文件夹?

回答

0

上传文件后,您无法将文件移动到其他位置。你可以让你的存储对象的模块,并且通过初始化

var multer = require('multer'); // middleware for handling multipart/form-data, 
// Constructor 
module.exports = function (name) { 
    try { 
     // Configuring appropriate storage 
     var storage = multer.diskStorage({ 
      // Absolute path 
      destination: function (req, file, callback) { 
       callback(null, './uploads/'+name); 
      }, 
      // Match the field name in the request body 
      filename: function (req, file, callback) { 
       callback(null, file.fieldname + '-' + Date.now()); 
      } 
     }); 
     return storage; 
    } catch (ex) { 
     console.log("Error :\n"+ex); 
    } 
} 

动态更改目录或使用打杂

var Busboy = require('busboy'); 
var fs = require('fs'); 
app.post('.....',fucntion(req, res, next){ 
var busboy = new Busboy({ headers: req.headers }); 
busboy.on('field', function(fieldname, val) { 

    req.body[fieldname] = val; 
}); 
busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { 
fstream = fs.createWriteStream("path/desiredImageName"); 
    file.pipe(fstream); 
    fstream.on('close', function() { 

     file.resume(); 

}); 
}) 
return req.pipe(busboy); 
}) 

或者您也可以使用changedest

app.post('/api/:type', multer({ 
dest: './uploads/', 
changeDest: function(dest, req, res) { 
var newDestination = dest + req.params.type; 
var stat = null; 
try { 
    stat = fs.statSync(newDestination); 
} catch (err) { 
    fs.mkdirSync(newDestination); 
} 
if (stat && !stat.isDirectory()) { 
    throw new Error('Directory cannot be created because an inode of a different type exists at "' + dest + '"'); 
} 
return newDestination 
} 
}), function(req, res) { 
//set your response 
}); 
+0

它比multer – luee

+0

更多钞票等是的...我已经指定了上述内容.. – Thennarasan

+0

我是nodejs中的新成员。 init意味着什么? 。请解释 – luee

相关问题