2016-09-24 47 views
7

Düğüm sunucuma blob nesnesi göndermeye çalışıyorum. İstemci tarafında MediaRecorder kullanarak bazı sesler kaydediyorum ve daha sonra dosyayı sunucumu işlemek için göndermek istiyorum.Düğüm veriyi düğüm, multer, express kullanarak gönder.

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

     } 

Bu multer kullanan benim ekspres yol, bir:

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

Ama günlüklerimde şey dönmek:

{ upl: '' } 
undefined 

bu konuda uzun bir süre geçiriyoruz böylece herhangi bir yardım takdir!

+0

Sığınağın parçası '' 'var upload = multer ({dest: __dirname + '/../public/uploads/'}); var type = upload.single ('upl'); '' ' – darkace

+0

' blobData' yerine yalnızca düzenli bir dize göndermeye çalışırsanız ve 'konsol.log (blobData)' 'nı söylerseniz bir şey alır mısınız? . – adeneo

+0

Getirici ağ isteği tarayıcınızın web dev araçlarından görüntülendiğinde tarayıcı 'Content-Type' başlığı ne gönderir? – mscdex

cevap

10

Yukarıdaki örneğinizin minimum yapılandırmasını çalıştırabiliyordum ve benim için iyi çalıştı.

Sunucu: public yılında

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 dosyası:

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

önyüz üzerinde console.log(myBlob); yazdırıyor. arka uç yazdırıyor:

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

Belki de hata ayıklama amacıyla bu örnekte olduğu gibi, bir kodlanmış Kabarcık ile deneyin.