2015-10-19 38 views
1

我想保存multer文件,但它並沒有真正想要的工作:的NodeJS 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 ...);

回答

2

這是因爲您正在嘗試使用舊的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 
    }) 
})