2016-09-24 11 views
7

का उपयोग करके नोड पर ब्लॉब डेटा भेजें मेरे नोड सर्वर पर ब्लॉब ऑब्जेक्ट भेजने की कोशिश कर रहा है। क्लाइंट साइड पर मैं MediaRecorder का उपयोग करके कुछ ऑडियो रिकॉर्ड कर रहा हूं और फिर मैं प्रसंस्करण के लिए फ़ाइल को अपने सर्वर पर भेजना चाहता हूं।fetch, multer, express

 saveButton.onclick = function(e, audio) { 
     var blobData = localStorage.getItem('recording'); 
     console.log(blobData); 

     var fd = new FormData(); 
     fd.append('upl', blobData, 'blobby.raw'); 

     fetch('/api/test', 
      { 
      method: 'post', 
      body: fd 
      }) 
     .then(function(response) { 
      console.log('done'); 
      return response; 
     }) 
     .catch(function(err){ 
      console.log(err); 
     }); 

     } 

यह मेरा एक्सप्रेस मार्ग, जो multer का उपयोग करता है:

var upload = multer({ dest: __dirname + '/../public/uploads/' }); 
    var type = upload.single('upl'); 
    app.post('/api/test', type, function (req, res) { 
    console.log(req.body); 
    console.log(req.file); 
    // do stuff with file 
    }); 

लेकिन मेरे लॉग लौट कुछ भी नहीं:

{ upl: '' } 
undefined 

इस पर एक लंबे समय खर्च कर रही है ताकि किसी भी मदद की सराहना की!

+0

मल्टी ''' var upload = multer ({dest: __dirname +' /../public/uploads/ '}) का हिस्सा; var type = upload.single ('upl'); '' ' – darkace

+0

यदि आप 'blobData' की बजाय केवल नियमित स्ट्रिंग भेजने का प्रयास करते हैं, तो आपको कुछ भी मिलता है, और' console.log (blobData) 'आपको क्या बताता है । – adeneo

+0

यदि आप अपने ब्राउज़र के वेब देव उपकरण से फ़ेच नेटवर्क अनुरोध देखते हैं तो ब्राउजर क्या 'सामग्री-प्रकार' शीर्षलेख भेजता है? – mscdex

उत्तर

10

मैं बस आपके उपर्युक्त उदाहरण की न्यूनतम कॉन्फ़िगरेशन चलाने में सक्षम था और यह मेरे लिए ठीक काम करता था।

सर्वर: public में

var express = require('express'); 
var multer = require('multer'); 
var app = express(); 

app.use(express.static('public')); // for serving the HTML file 

var upload = multer({ dest: __dirname + '/public/uploads/' }); 
var type = upload.single('upl'); 

app.post('/api/test', type, function (req, res) { 
    console.log(req.body); 
    console.log(req.file); 
    // do stuff with file 
}); 

app.listen(3000); 

HTML फ़ाइल:

<script> 
var myBlob = new Blob(["This is my blob content"], {type : "text/plain"}); 
console.log(myBlob); 

// here unnecessary - just for testing if it can be read from local storage 
localStorage.myfile = myBlob; 

var fd = new FormData(); 
fd.append('upl', localStorage.myfile, 'blobby.txt'); 

fetch('/api/test', 
{ 
    method: 'post', 
    body: fd 
}); 
</script> 

console.log(myBlob); दृश्यपटल पर प्रिंट कर रहा है। बैकएंड प्रिंट कर रहा है:

{} 
{ fieldname: 'upl', 
    originalname: 'blobby.txt', 
    encoding: '7bit', 
    mimetype: 'text/plain', 
    destination: '/var/www/test/public/uploads/', 
    filename: 'dc56f94d7ae90853021ab7d2931ad636', 
    path: '/var/www/test/public/uploads/dc56f94d7ae90853021ab7d2931ad636', 
    size: 23 } 

हो सकता है कि यह भी एक हार्ड-कोडेड ब्लॉब के साथ की तरह डीबगिंग उद्देश्यों के लिए इस उदाहरण में प्रयास करें।

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