audio recording upload to server using jwagener's record


audio recording upload to server using jwagener's recorder.js and recorder.swf

我正在尝试在客户端录制音频,并将其发送到服务器进行处理。我已经能够成功地在客户端录制和播放音频。当我需要将信息发布到服务器时,我的问题就出现了。

我使用的是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语句返回以下内容:

阵列([名称]=>测试.wav[文件名]=>音频.wav【上传】=>提交查询)

似乎没有任何原始的php发布数据,并且文件被保存为空。我做的事情有什么明显的错误吗?我使用WAMI记录器尝试过,它运行得很好,但问题是我需要能够通过javascript将信息发布到服务器,而WAMI只是在每次录制后自动发布。

提前感谢您的帮助或意见。此外,如果有人熟悉其他免费的javascript/flash记录器,请告诉我他们的方向。我已经在堆栈溢出中搜索了一些建议。

尝试将以下代码放入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;

使用此https://github.com/cykod/FlashWavRecorder

我用过这个,效果很好。

您可以录制、播放,也可以将录制的文件上传到服务器,这里还使用了recorder.js。