flash – 在Node.js上传二进制文件
发布时间:2020-12-15 07:32:04 所属栏目:百科 来源:网络整理
导读:我正在使用Flash来录制和上传音频到节点服务器. Flash客户端是 jrecorder的变体.当用户完成录制时,使用POST请求(不是表单,因为Flash无法创建文件)使用音频ByteArray作为POST请求的数据上载音频(请参阅更多 here). 我可以使用下面的代码在Node-land上正确接收
我正在使用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(缓冲区,流等)中更有效地实现其他方式之前将其置于工作状态 解决方法
取出以下行
req.setEncoding('utf8'); 你没有收到utf8数据,你正在接收二进制数据. 你最好使用缓冲区而不是字符串 app.use(function(req,next) { var data = new Buffer(''); req.on('data',function(chunk) { data = Buffer.concat([data,chunk]); }); req.on('end',function() { req.rawBody = data; next(); }); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |