2012-09-05 65 views
1

我試圖在客戶端錄製音頻,並將其發送到服務器進行處理。 我已經成功地在客戶端錄製和播放音頻。當我需要將信息發佈到服務器時,我的問題就出現了。錄音上傳到服務器使用jwagener的recorder.js和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> 

POST請求按他的文檔,如下所示:

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 /閃存記錄器,請指出我的方向。我已經通過堆棧溢出搜索了一些建議。

回答

0

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

我用這一個,和它的工作般的魅力。

您可以錄製,回放,並將錄製的文件上傳到服務器,這裏也使用recorder.js。下面的代碼到PHP文件

1

嘗試,

$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;