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 }