Używam Flasha do nagrywania i przesyłania dźwięku do serwera węzła. Klient Flash jest odmianą jrecorder. Kiedy użytkownik skończy nagrywanie, dźwięk jest przesyłany za pomocą żądania POST (nie formularza, ponieważ Flash nie może tworzyć plików) z dźwiękiem ByteArray jako danymi żądania POST (więcej informacji: here).Przesyłanie pliku binarnego na Node.js
Jestem w stanie odebrać plik poprawnie na Node-land, używając poniższego kodu, ale dźwięk, który wychodzi, jest zniekształcony i nic nie słychać. Mając to na uwadze, zawartość pliku może być odtwarzana przez VLC i innych graczy + Sox jest w stanie zakodować go jako mp3.
Oto mój kod przy użyciu węzła:
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
}
}
Teraz, jeśli mogę użyć tego samego klienta Flash i uczynić żądanie POST do serwera Rails i użyć poniższy kod, plik jest doskonale zachowane.
def record
file = request.raw_post
# Save file to S3
end
Należy pamiętać, że nie jestem ekspertem Węzeł więc proszę, jeśli macie jakieś sugestie na temat tego, co powinno się używać zamiast zapisywania fragmentów prosimy zamieszczać przykłady kodu. Moim głównym celem w tej chwili jest, aby to do stanu roboczego przed odkrywania innego sposobu osiągania bardziej efektywnie w węźle (buforów, strumieni, itp)
Szanowny Panie jesteś niesamowity! To zadziałało, dzięki! Nie mogę uwierzyć, że tęsknię za tą linią. To był jeden z wielu powtórzeń, które dzisiaj wypróbowałem. Dzięki jeszcze raz! –
Dzięki za wspaniałą odpowiedź! Miałem tak wiele problemów z tym i nie rozumiem, jak to nie może być domyślnie realizowane przez express, ale nvm. Dzięki! –
thx człowiek pracuje dla mnie – cloverink