Загрузка бинарного файла на 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 (буферы, потоки и т. Д.).