Загрузка бинарного файла на Node.js

Я использую Flash для записи и загрузки аудио на сервер узла. Flash-клиент представляет собой вариантjrecorder, Когда пользователь завершает запись, аудио загружается с использованием POST-запроса (а не формы, потому что Flash не может создавать файлы) с аудио ByteArray в качестве данных POST-запроса (см. БольшеВот).

Я могу правильно получить файл на Node-land, используя приведенный ниже код, но выводимое аудио искажено, и вы ничего не слышите. С учетом сказанного, содержимое файла может быть воспроизведено VLC и другими плеерами + Sox может закодировать его как mp3.

Вот мой код при использовании 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
    }   
}

Теперь, если я использую тот же Flash-клиент и сделаю POST-запрос к серверу Rails и использую приведенный ниже код, файл будет отлично сохранен.

def record
    file = request.raw_post

    # Save file to S3
end

Обратите внимание, что я не являюсь экспертом по Node, поэтому, если у вас есть какие-либо предложения по поводу того, что мне следует использовать вместо сохранения фрагментов, пожалуйста, публикуйте примеры кода. Моя основная цель сейчас - привести это в рабочее состояние, прежде чем исследовать другие способы более эффективного выполнения в Node (буферы, потоки и т. Д.).

Ответы на вопрос(1)

Ваш ответ на вопрос