2017-04-24 8 views
6

मैं फ़ाइल अपलोड के लिए 'multer' प्लगइन का उपयोग कर रहा हूं। फ़ाइल सफलतापूर्वक अपलोड करने के बाद मैं एक और फ़ंक्शन कॉल करना चाहता हूं।नोडजेएस: 'multer' फ़ाइल अपलोड कॉलबैक फ़ंक्शन

यहाँ मेरी कोड:

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

मैं छवि अपलोड करने के बाद अपने नए फ़ंक्शन को कॉल करना चाहते हैं। इस कोड का उपयोग करके मैं छवि को सफलतापूर्वक अपलोड कर सकता हूं, लेकिन कॉल कॉलबैक फ़ंक्शन नहीं प्राप्त कर सकता हूं।

छवि अपलोडिंग पूर्ण होने के बाद मुझे नए फ़ंक्शन को कॉल करने की आवश्यकता है।

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

तरह की कोशिश आप एक मिडलवेयर समारोह के रूप में multer उपयोग कर सकते हैं: router.post ('/ छवि', imageUpload, anotherFunction) –

+0

आप फ़ाइल नाम नहीं पार्स करने दिया जाना चाहिए, वहाँ उस के लिए एक मॉड्यूल है: इसके लिए कई अंतर्निहित कार्यों के साथ 'पथ', उदाहरण: 'path.extname' (https://nodejs.org/api/path.html#path_path_extname_path)। फिर आपको सुरक्षा कारणों से कुछ फ़ाइल एक्सटेंशन अवरुद्ध करना चाहिए ... शुरुआत के लिए, निष्पादन योग्य सभी फ़ाइल नाम: '.exe',' .scr' और ऐसे। – arboreal84

+0

लेकिन मुझे 'var uploadSuccessFn = function() { // कोड } कॉल करने की आवश्यकता है' छवि अपलोड करने के बाद सफलतापूर्वक यह फ़ंक्शन। –

उत्तर

1

समारोह (प्रक्रिया के अंदर) जब आप upload की प्रक्रिया बुला रहे हैं, कॉलबैक fuction सिर्फ इसका इस्तेमाल होता है। आप लाइन console.log यह मतलब है लिखा जाता है जब अपनी फ़ाइल अपलोड कर रहा है अपने कॉलबैक fuction कहा जाता है, लेकिन आप उपयोग नहीं कर रहे ..

इस तरह किया जा सकता है: -

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

यह आप json प्रतिक्रिया दे देंगे। तब

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

बस फ़ाइल की आवश्यकता होती है और बाद अनुरोध हैंडलर में इसका इस्तेमाल करते हैं:

+0

कंसोल।लॉग ('अपलोड सफल'); यह कंसोल छवि अपलोड करने के बाद मुद्रित नहीं है –

1

आप हो सकता है आपके पोस्ट हैंडलर में 2 कार्यों का उपयोग करने के लिए कोड को बदल सकता है

. 
. 
var imageUpload = require('./handler'); 

app.post('/image/upload',imageUpload.uploadFile,imageUpload.afterUpload); 

. 
. 
+0

यह काम नहीं कर रहा है –

+0

क्या आप अधिक जानकारी प्रदान कर सकते हैं .. क्या आपको कोई त्रुटि दिखाई दे रही है? क्या फ़ाइल स्वयं अपलोड नहीं होती है। – bitanath

+0

'module.exports = {uploadFile: uploadFile, afterUpload: afterUpload} का उपयोग करके;' मैं 'uploadFile' फ़ंक्शन को कॉल करने में सक्षम नहीं हूं –

1

मुझे लगता है कि सुझाव है

Multer Storage Engine

: आप multer के आधार पर अपने खुद के अनुकूलित भंडारण इंजन बनाने के 0

फिर आप अपनी फ़ाइल अपलोड होने के बाद ही अनुकूलित कोड जोड़ते हैं। कुछ इस तरह:

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

कृपया ध्यान दें कि वर FS = की आवश्यकता का उपयोग करना होगा ('FS') यह काम करने के लिए। उममीद है कि इससे मदद मिलेगी।

0

आपके कोड में जहां से आप कॉलिंग करते हैं, उस स्थिति में यदि कोई शर्त है जो चेकबैक प्रतिक्रिया जांचता है। अगर प्रतिक्रिया शून्य है तो आप उस स्थिति में एक और फ़ंक्शन कॉल कर सकते हैं और कुछ त्रुटि दिखाएं।

मुझे लगता है कि आप जिस फ़ंक्शन को कॉल करने का प्रयास कर रहे हैं वह उपयोगकर्ता को किसी प्रकार का सफलता संदेश दिखाएगा।

0

इस

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 
    } 
+0

काम नहीं कर रहा है .... –

+0

यह मेरे लिए काम करता है मैं नहीं करता कि यह कोड आपके लिए क्यों काम नहीं कर रहा है :( –

+0

मैं अपनी फ़ाइल में एक ही कोड कॉपी और पेस्ट करता हूं, लेकिन यह काम नहीं कर रहा है। यह कोई त्रुटि प्रदर्शित नहीं कर रहा है। कंसोल लॉग प्रिंट भी नहीं। –

संबंधित मुद्दे