为了账号安全,请及时绑定邮箱和手机立即绑定

如何将音频 blob 发布到服务器 javascript 和 php

如何将音频 blob 发布到服务器 javascript 和 php

PHP
MM们 2021-11-26 14:55:04
我正在尝试使用 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 请求负载参数包括: -----------------------------3054348293122Content-Disposition: form-data; name="audio"; filename="blob"Content-Type: audio/ogg然后是一堆我认为是以文本形式编码的音频的数据。
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

我只是通过反复试验弄清楚了,所以它可能不是最优化的方法。但是从我得到的信息来看,如果你通过 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);


查看完整回答
反对 回复 2021-11-26
  • 1 回答
  • 0 关注
  • 322 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信