我正在尝试在客户端录制音频并将其发送到服务器进行处理。 我已经成功地在客户端录制和播放音频。当我需要将信息发布到服务器时,我的问题就出现了。
我正在使用jwageners的recorder.js:https://github.com/jwagener/recorder.js#readme
我有一个位于网站主目录中的crossdomain.xml文件。内容如下
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false"/>
</cross-domain-policy>
根据他的文档发布请求,如下所示:
function upload(){
Recorder.upload({
method: "POST",
url: "http://localhost/fagaudio/recorder/recorder_server.php",
audioParam: "audiofile",
params: {
"name": "test.wav",
},
success: function(responseText){
alert(responseText);
},
error: function(){
}
});
}
在服务器端(recorder_server.php)我正在尝试这样的事情:
print_r($_POST);
$name = $_POST['name'];
$content = file_get_contents('php://input');
$fh = fopen("audio/".$name, 'w') or die("can't open file");
fwrite($fh, $content);
fclose($fh);
print_r语句返回以下内容:
阵 ( [name] =&gt; test.wav [文件名] =&gt; audio.wav [上传] =&gt;提交查询 )
似乎没有任何原始的PHP帖子数据,并且该文件被保存为空。我正在做的事情有什么明显的错误吗?我已经尝试使用WAMI记录器并且它工作正常但问题是我需要能够通过javascript将信息发布到服务器并且wami只是在每次录制后自动执行此操作。
提前感谢您提供任何帮助或意见。如果有人熟悉其他免费的javascript / flash录像机,请指出我的方向。我已经通过堆栈溢出搜索了一些建议。
答案 0 :(得分:1)
在php文件中尝试以下代码,
$save_folder = dirname(__FILE__) . "/audio";
if(! file_exists($save_folder)) {
if(! mkdir($save_folder)) {
die("failed to create save folder $save_folder");
}
}
$key = 'filename';
$tmp_name = $_FILES["audiofile"]["tmp_name"];
$upload_name = $_FILES["audiofile"]["name"];
$type = $_FILES["audiofile"]["type"];
$filename = "$save_folder/$upload_name";
$saved = 0;
if(($type == 'audio/x-wav' || $type == 'application/octet-stream') && preg_match('/^[a-zA-Z0-9_\-]+\.wav$/', $upload_name) ) {
$saved = move_uploaded_file($tmp_name, $filename) ? 1 : 0;
}
print ($saved ? "Saved" : 'Not saved');
exit;
答案 1 :(得分:0)
使用此https://github.com/cykod/FlashWavRecorder
我使用过这个,它就像魅力一样。
您可以录制,播放并将录制的文件上传到服务器,此处还使用了recorder.js。