2013-05-16 25 views
6

Düğüm sunucusuna ses kaydetmek ve yüklemek için Flash kullanıyorum. Flash istemcisi, jrecorder'un bir varyasyondur. Kullanıcı kayıt bittiğinde ses, POST isteğinin verileri olarak ses ByteArray ile bir POST isteği (Flash dosya oluşturamadığı için bir form değil) kullanılarak yüklenir (bkz. Daha fazla here).Node.js'de ikili dosya yükleniyor

Aşağıdaki kodu kullanarak dosyayı Node-land üzerinde doğru şekilde alabiliyorum ancak çıkan ses karıştırılıyor ve hiçbir şey duyamıyorsunuz. Bununla birlikte, dosyanın içeriği VLC ve diğer oyuncular tarafından çalınabilir + Sox bir mp3 olarak kodlayabilir. Aynı Flaş istemcisi kullanıyorsanız ve bir Raylar sunucuya POST isteği yapmak ve aşağıdaki kodu kullanabilirsiniz, dosya mükemmel kaydedilir,

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

app.use (function(req, res, next) { 
    req.rawBody = ''; 
    req.setEncoding('utf8'); 

    if(req.method.toLowerCase() == "post") 
    { 
     req.on('data', function(chunk) { req.rawBody += chunk }); 
     req.on('end', function() { done(req, res); }); 
    } 

    next(); 
}); 

function done(req, res) 
{ 
    fs.writeFile('abc.wav', req.rawBody, 'binary', function(err){ 
     if (err) throw err; 

     // Save file to S3 
    } 
} 

Şimdi:

İşte düğüm kullanırken benim kodudur. Sana yerine parçalar kaydetme kullanmalıyım ne herhangi bir öneriniz varsa yüzden kod örnekleri gönderin lütfen bir Düğüm uzman değilim

def record 
    file = request.raw_post 

    # Save file to S3 
end 

Not. Asıl amacım şu anda

cevap

16

req.setEncoding('utf8'); 

Değilsin aşağıdaki satırı çıkar (vs, tamponları akışları) Düğüm daha verimli ulaşmanın başka yolu keşfetmeden önce bir çalışma durumuna bu elde etmektir utf8 verilerini alıyorsanız, binary verilerini alıyorsunuz.

Sen are korku veren yerine dize

app.use(function(req, res, next) { 
    var data = new Buffer(''); 
    req.on('data', function(chunk) { 
     data = Buffer.concat([data, chunk]); 
    }); 
    req.on('end', function() { 
    req.rawBody = data; 
    next(); 
    }); 
}); 
+1

Sevgili efendim bir tampon kullanarak daha iyi olurdu! Bu çalıştı, teşekkürler! Bu çizgiyi kaçırdığına inanamıyorum. Bugün denediğim birçok yinelemeden biriydi. Tekrar teşekkürler! –

+0

Harika cevap için teşekkürler! Bununla ilgili çok fazla sorun yaşadım ve bunun nasıl varsayılan olarak ifade edilemediğini anlamıyorum, ancak nvm. Teşekkürler! –

+0

thx adam benim için çalışıyor – cloverink