2013-05-16 16 views
6

私は、ノードサーバーにオーディオを録音してアップロードするためにFlashを使用しています。 Flashクライアントはjrecorderのバリエーションです。ユーザーが録音を完了すると、POST要求のデータとしてAudio ByteArrayを持つPOSTリクエスト(Flashがファイルを作成できないためフォームではありません)を使用してオーディオがアップロードされます(詳細はhereを参照)。Node.jsでバイナリファイルをアップロード

以下のコードを使用してNode-Landでファイルを正しく受信することはできますが、出てくるオーディオが乱れて何も聞こえません。これで、ファイルの内容はVLCや他のプレイヤーで再生できます+ Soxはmp3としてエンコードすることができます。私は同じFlashクライアントを使用して、RailsのサーバにPOSTリクエストを作成し、以下のコードを使用している場合、ファイルが完全に保存され、

​​

今:

はここでノードを使用して私のコードです。私はあなたが私が代わりにチャンクを保存するのに使用すべきか上の任意の提案がある場合はそのコード例を投稿してくださいしてくださいノードの専門家ではないです

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

男は私のために働く – cloverink

関連する問題