一尘不染

将Chrome中记录的WAV文件保存到服务器

php

在这里和其他地方,我已经看到许多对此的部分答案,但是我非常适合作为新手程序员,并希望找到一个彻底的解决方案。我已经能够在Chrome
Canary(v。29.x)中设置笔记本电脑麦克风的录制音频,并且可以使用recorder.js相对容易地设置录制.wav文件并将其保存在本地,例如:

http://webaudiodemos.appspot.com/AudioRecorder/index.html

但是我需要能够将文件保存到我正在运行的Linux服务器上。这是将Blob记录的数据实际发送到服务器并将其保存为.wav文件的形式,这引起了我的注意。正如我所了解的那样,我不具备有关如何将blob保存到URL以及如何处理Linux上的二进制文件的必备PHP和/或AJAX知识,这些二进制文件确实使保存.wav文件充满了挑战。我非常欢迎任何正确方向的指点。


阅读 329

收藏
2020-05-29

共1个答案

一尘不染

客户端JavaScript函数上传WAV Blob:

function upload(blob) {
  var xhr=new XMLHttpRequest();
  xhr.onload=function(e) {
      if(this.readyState === 4) {
          console.log("Server returned: ",e.target.responseText);
      }
  };
  var fd=new FormData();
  fd.append("that_random_filename.wav",blob);
  xhr.open("POST","<url>",true);
  xhr.send(fd);
}

PHP文件upload_wav.php

<?php
// get the temporary name that PHP gave to the uploaded file
$tmp_filename=$_FILES["that_random_filename.wav"]["tmp_name"];
// rename the temporary file (because PHP deletes the file as soon as it's done with it)
rename($tmp_filename,"/tmp/uploaded_audio.wav");
?>

之后,您可以播放文件/tmp/uploaded_audio.wav

但要记住!/tmp/uploaded_audio.wav是由用户创建的www- data,(默认情况下为PHP)用户不可读。要自动添加适当的权限,请添加以下行

chmod("/tmp/uploaded_audio.wav",0755);

到PHP的末尾(在PHP end标签之前?>)。

希望这可以帮助。

2020-05-29