NodeJS:'multer'file uploadcallback函数

我正在使用'multer'插件进行file upload。 我想在file upload成功后调用另一个函数。

在这里我的代码:

module.exports.uploadFile = upload.single('file', '_id'), function (req, res, next) { console.log('Uploade Successful'); } var upload = multer({ storage: multer.diskStorage({ destination: './Media/ChatDocUpload', filename: function (req, file, cb) { var dest = './Media/ChatDocUpload'; //query string params var _chatMessageID = req.query.chatMessageID; var _ext = file.originalname.substring(file.originalname.indexOf(".")); var _fileName = _chatMessageID + _ext; cb(null, _fileName); } }) }); 

我想在图片上传后调用我的新function。 使用这个代码,我可以成功上传图片,但没有获得调用callback函数。

上传完成后需要调用新的function。

 //I need to call this function after image fully uploaded var uploadSuccessFn = function () { //code } 

当你调用upload的过程时,函数(进程内部)就是callback函数。 你写的行console.log这意味着你的callback函数被称为当你的file upload,但你没有使用..

可以这样做:

 function(req,res){ //callback function res.json({message:"file uploaded successfully"}); } 

它会给你json响应。

你也许可以改变代码在POST处理程序中使用2个函数:

 module.exports = {uploadFile: uploadFile, afterUpload: afterUpload}; function uploadFile(){ upload.single('file', '_id'); } function afterUpload(req, res, next) { console.log('Uploade Successful'); } var upload = multer({ storage: multer.diskStorage({ destination: './Media/ChatDocUpload', filename: function (req, file, cb) { var dest = './Media/ChatDocUpload'; //query string params var _chatMessageID = req.query.chatMessageID; var _ext = file.originalname.substring(file.originalname.indexOf(".")); var _fileName = _chatMessageID + _ext; cb(null, _fileName); } }) }); 

然后只需要该文件,并在后请求处理程序中使用它:

 . . var imageUpload = require('./handler'); app.post('/image/upload',imageUpload.uploadFile,imageUpload.afterUpload); . . 

我build议你根据multer创build你自己定制的存储引擎:

Multer存储引擎

然后,您只需在file upload后添加自定义代码即可。 像这样的东西:

 MyCustomStorage.prototype._handleFile = function _handleFile (req, file, cb) { this.getDestination(req, file, function (err, path) { if (err) return cb(err) var outStream = fs.createWriteStream(path) file.stream.pipe(outStream) outStream.on('error', cb) outStream.on('finish', function () { // Insert here whatever you want to do... console.log('Successfully Uploaded'); cb(null, { path: path, size: outStream.bytesWritten }) }) })} 

请注意,您必须使用var fs = require('fs')才能使其工作。 希望这个帮助。

在你的代码从你的调用上传放一个if条件,检查检查callback响应。 如果响应null,那么你可以在这种情况下调用另一个函数,否则显示一些错误。

我想你试图调用的函数会向用户显示某种成功消息。

试试这个

  var storage = multer.diskStorage({ destination: function (req, file, cb) { return cb(null, './Media/ChatDocUpload') }, filename: function (req, file, cb) { var _chatMessageID = req.query.chatMessageID; var _ext = file.originalname.substring(file.originalname.indexOf(".")); var _fileName = _chatMessageID + _ext; return cb(null, _fileName); } }) var upload = multer({ storage: storage }) module.exports.uploadFile = upload.single('file'), function (req, res, next) { console.log('Uploade Successful'); // you function after uploading images }