1

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

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

数组([名称] => test.wav [文件名] => audio.wav [上传] => 提交查询)

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

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

4

2 回答 2

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;
于 2013-04-07T01:55:33.423 回答
0

使用这个https://github.com/cykod/FlashWavRecorder

我用过这个,效果很好。

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

于 2012-12-17T09:59:43.707 回答