小编Gab*_*ian的帖子

在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
    }   
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我使用相同的Flash客户端并向Rails服务器发出POST请求并使用下面的代码,则文件将被完美保存.

def record
    file = request.raw_post

    # Save file to S3
end
Run Code Online (Sandbox Code Playgroud)

请注意,我不是Node专家,所以如果您对我应该使用什么而不是保存块有任何建议,请发布代码示例.我现在的主要目的是在探索在Node(缓冲区,流等)中更有效地实现其他方式之前,将其置于工作状态

flash binary upload node.js express

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

binary ×1

express ×1

flash ×1

node.js ×1

upload ×1