2013-05-16 93 views
6

我正在使用Flash記錄音頻並將其上傳到節點服務器。 Flash客戶端是jrecorder的變體。當用戶完成錄製時,使用POST請求(不是表單,因爲Flash無法創建文件)上傳音頻,並將音頻ByteArray作爲POST請求的數據(請參閱更多here)。在Node.js上上載二進制文件

我能夠使用下面的代碼在Node-land上正確接收文件,但是出來的音頻被破壞,你聽不到任何東西。據說,該文件的內容可以通過VLC和其他播放器播放+ Sox可以將其編碼爲mp3。

下面是使用節點時,我的代碼:

​​

現在,如果我使用相同的Flash客戶端,使POST請求到Rails的服務器,並使用下面的代碼,該文件是完全保存。

def record 
    file = request.raw_post 

    # Save file to S3 
end 

請注意,我不是一個節點專家,所以請,如果您有什麼要我用,而不是保存塊任何建議,請張貼代碼示例。我的主要目的,現在的問題是探索節點更有效地實現其他方式之前得到這個工作狀態(緩衝區,溪流等)

回答

16

取出以下行

req.setEncoding('utf8'); 

你不收到utf8數據,即表示您收到binary數據。

你會過得更好用,而不是一個字符串緩衝區

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

親愛的主席先生你真棒!這工作,謝謝!我不敢相信我錯過了那條路。這是我今天嘗試的衆多迭代之一。再次感謝! –

+0

感謝您的好評!我有這麼多的問題,我不明白這是如何不能通過快遞默認實現,但nvm。謝謝! –

+0

thx男人爲我工作 – cloverink