【发布时间】:2013-05-12 00:39:30
【问题描述】:
我正在使用 Flash 录制音频并将其上传到节点服务器。 Flash 客户端是jrecorder 的变体。当用户完成录制后,使用 POST 请求(不是表单,因为 Flash 无法创建文件)上传音频,并将音频 ByteArray 作为 POST 请求的数据(参见更多here)。
我可以使用下面的代码在 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 客户端并向 Rails 服务器发出 POST 请求并使用以下代码,则文件将完美保存。
def record
file = request.raw_post
# Save file to S3
end
请注意,我不是 Node 专家,所以如果您对我应该使用什么而不是保存块有任何建议,请发布代码示例。我现在的主要目的是在探索其他在 Node 中更有效地完成任务的方法(缓冲区、流等)之前让它进入工作状态
【问题讨论】:
标签: flash node.js upload binary express