Hochladen einer Binärdatei auf Node.js

Ich verwende Flash, um Audio aufzunehmen und auf einen Knotenserver hochzuladen. Der Flash-Client ist eine Variation vonjrecorder. Wenn der Benutzer mit der Aufnahme fertig ist, wird das Audio mithilfe einer POST-Anforderung (kein Formular, da Flash keine Dateien erstellen kann) mit dem Audio-ByteArray als Daten der POST-Anforderung hochgeladen (weitere Informationen finden Sie hier)Hier).

Ich kann die Datei auf Node-land mit dem folgenden Code korrekt empfangen, aber das Audio, das ausgegeben wird, ist verstümmelt und Sie können nichts hören. Trotzdem kann der Inhalt der Datei von VLC abgespielt werden, und andere Player + Sox können sie als MP3-Datei kodieren.

Hier ist mein Code bei der Verwendung von Node:

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

Wenn ich nun denselben Flash-Client verwende und die POST-Anfrage an einen Rails-Server stelle und den folgenden Code verwende, wird die Datei perfekt gespeichert.

def record
    file = request.raw_post

    # Save file to S3
end

Beachten Sie, dass ich kein Node-Experte bin. Wenn Sie also Vorschläge haben, was ich anstelle des Speicherns der Chunks verwenden soll, geben Sie bitte Codebeispiele an. Mein Hauptzweck im Moment ist es, dies in einen funktionierenden Zustand zu versetzen, bevor ich eine andere Möglichkeit erkunde, wie ich es effizienter in Node (Puffer, Streams usw.) erreichen kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage