Nodejs的multer选项不会触发

我试图保存与multer文件,但它并不真的想工作:

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './') }, filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now() + '.' + path.extname(file.originalname)); } }); var upload = multer({ storage: storage, onFileUploadComplete : function (file) { console.log('Completed file!'); }, onParseStart : function() { console.log('whatevs'); }}); app.post('/upload' ,upload.single('thisisme'), function(req,res) {}); 

该文件不会被保存,但ParseStart或UploadComplete永远不会被触发。 这是为什么? 我也尝试使用app.use(multer …);

这是因为你正在尝试使用旧的multer api。 在当前版本中没有事件处理程序: onFileUploadCompleteonParseStart 。 请检查文档的API细节: https : //github.com/expressjs/multer

你的代码的这一部分看起来不错:

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './') }, filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now() + '.' + path.extname(file.originalname)); } }); 

这也是可以的:

 app.post('/upload' ,upload.single('thisisme'), function(req,res) {}); 

这是错误的:

 var upload = multer({ storage: storage, onFileUploadComplete : function (file) { console.log('Completed file!'); }, onParseStart : function() { console.log('whatevs'); }}); 

将其更改为:

 var upload = multer({ storage: storage, fileFilter:function(req, file, cb) { //Set this to a function to control which files should be uploaded and which should be skipped. It is instead of onParseStart. } }); 

没有什么,而不是onFileUploadComplete 。 但:

 app.post('/upload' ,upload.single('thisisme'), function(req,res) { //this is call when upload success or failed }); 

你可以把它改成这样:

 app.post('/upload', function (req, res) { upload.single('thisisme')(req, res, function (err) { if (err) { // An error occurred when uploading return } // Everything went fine, and this is similar to onFileUploadComplete }) })