javascript - 如何将音频Blob发布到服务器JavaScript和PHP

标签 javascript php post audio blob

我正在尝试使用JS和HTML将由客户端麦克风的录音制成的音频blob文件发送到服务器,以便在其中保存。我已经尝试过使用FormData,以便可以根据我称为ID的变量将文件与名称相关联。

我正在尝试使用php脚本将FormData张贴到服务器上的某个位置,但是这给我留下了一个没有名称且没有数据(0字节)的文件。

媒体记录器停止时,我的JavaScript包含以下功能:

 mediaRecorder.onstop = function(e) {
        audioBlob = new Blob(audioChunks, {type:'audio/ogg'});
        blobUrl = URL.createObjectURL(audioBlob);
        var formData = new FormData();
        formData.append('audio',audioBlob);
        formData.append('name',String(ID,".ogg"))
         $.ajax({
        type: 'POST',
        url: 'audiosaver.php',
        data: formData,
        cache: false,
        contentType: "multipart/form-data",
        processData: false,

    })

和PHP:
 <?php
$post_data = file_get_contents('php://input'); 
$name = "data/".$post_data;
$data = var_dump($_FILES);

file_put_contents($name, $data);
?>

我在服务器上的数据文件夹中得到一个名为“-.ogg”的文件,它是0字节。我的XHR响应有效负载说array(0){},而XHR请求有效负载参数包括:
 -----------------------------3054348293122

Content-Disposition: form-data; name="audio"; filename="blob"

Content-Type: audio/ogg

然后我假设一堆数据是以文本形式编码的音频。

最佳答案

我只是通过反复试验弄清楚了它,所以它可能不是最优化的方法。但是从我得到的结果来看,如果您通过POST方法发送文件或Blob,那么它将转到$_FILES变量,如果您发送其他任何内容,则它将转到$_REQUEST方法。

因此,在Chrome中对我有用的代码(我相信默认保存为.WAV)是(在php标签之间):

$data = file_get_contents($_FILES['audio']['tmp_name']);    

$fp = fopen("saved_audio/" . $_REQUEST["name"] . '.wav', 'wb');

fwrite($fp, $data);
fclose($fp);

关于javascript - 如何将音频Blob发布到服务器JavaScript和PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57511898/

相关文章:

php - 使用可变项创建一个两次通过的 PHP 缓存系统

php - 如何在 Laravel 中的 Input::all() 之后附加额外的值

json - POST:在 url 本身中发送 post 请求

node.js - Google OAuth 使用刷新 token 获取新的访问 token

php - Javascript 添加 PHP 文件

javascript - 如何将 JQuery 添加到从 ajax 调用加载的 html 中?

javascript - Discord.js 不收集用户的 DM

javascript - 花哨的自定义输入字段

php - 使用复选框选中所有复选框

java - PHP 接收来自 Java 的 POST 请求