Я использую Flash для записи и выгрузки звука на сервер узлов. Клиентом Flash является вариант jrecorder. Когда пользователь выполнит запись, звук загружается с использованием запроса POST (а не формы, поскольку Flash не может создавать файлы) с аудио ByteArray в качестве данных запроса POST (см. Больше here).Загрузка двоичного файла на Node.js
Я могу получить файл правильно на узловой земле, используя приведенный ниже код, но звук, который выходит, искажен, и вы ничего не слышите. С учетом сказанного, содержимое файла может воспроизводиться VLC и другими игроками + Sox может кодировать его как mp3.
Вот мой код при использовании узла:
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 (буферов, потоков и т.д.)
Дорогой сэр, вы УДИВИТЕЛЬНЫЙ! Это сработало, спасибо! Не могу поверить, что я пропустил эту линию. Это была одна из многих итераций, которые я пробовал сегодня. Еще раз спасибо! –
Спасибо за отличный ответ! У меня было так много проблем с этим, и я не понимаю, как это невозможно реализовать по умолчанию, но nvm. Благодаря! –
THX человек работает для меня – cloverink