2016-07-29 3 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

ファイルをアップロードした後にファイルを別の場所に移動することはできません。あなたは、ストレージオブジェクトモジュールを作成し、init

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); 
    } 
} 

OR

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

を使用することができますbusboyを使用してください経由で動的にディレクトリを変更することができmulter – luee

+0

よりもそれがかのう他のですはい...私はそれを上に指定しました.. – Thennarasan

+0

私はnodejsで新しくなりました。 initの意味は? 。説明してください – luee

関連する問題