【问题标题】:How to POST an audio blob to a server javascript and php如何将音频 blob 发布到服务器 javascript 和 php
【发布时间】:2019-12-22 00:38:08
【问题描述】:

我正在尝试使用 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

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

【问题讨论】:

    标签: javascript php post audio blob


    【解决方案1】:

    我只是通过反复试验才弄明白的,所以它可能不是最优化的方法。但是据我所知,如果您通过 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 2018-01-21
      • 2016-12-11
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2019-08-31
      相关资源
      最近更新 更多