当前位置: 首页 > 知识库问答 >
问题:

将音频blob转换为文件以上载到后端(不在本地保存)

那开济
2023-03-14

编辑:这里有几个小的打字错误,现在已经更正了,解决了一半的问题。另一半在公认的答案中。

...

我在客户端(nuxt/vue)录制麦克风音频,并希望将其发送到我的后端(Strapi)。我有一个媒体记录器,当记录停止时,数据被添加到我的记录文件数组。这部分工作,录音后我可以用嵌入式播放器播放。

HTML部分:

<audio
  id="localaudio"
  ..
></audio>

JS:

recorder = new MediaRecorder(mediaStream);

...     

recorder.addEventListener("dataavailable", function(e) { 
        document.querySelector("#localaudio").src = URL.createObjectURL(e.data); //add it to the player element on the page for playback
        recordingFile.push(e.data); // pushing to array recordingFile
      });

但是,我在将其上载到Strapi后端时遇到问题。我想原因是我试图上传一个blob,而Strapi需要一个文件。

  let blob = new Blob(recordingFile, { type: "audio/ogg" });

  const data = {
    "user" : "test",
    "files.File" : blob //prefix is strapi convention
  };

  const formData = new FormData();
  formData.append('data', JSON.stringify(data));

  axios({
    method: "post",
    url: "http://localhost:1337/recordings",
    data: formData,
    headers: {
      "content-type": `multipart/form-data;`
    }
  })

我确实得到了肯定的响应,并使用user=“test”创建了一个新条目,但文件字段保持为空。我尝试发送文件URL(URL.createObjectURL(..)而不是水滴本身,但它也不起作用。

我遵循strapi留档的说明,但它使用文件系统中的文件,而不是在浏览器中创建的Blob。

有什么提示吗?

编辑:录音。设置。json:

{
  "kind": "collectionType",
  "collectionName": "recordings",
  "info": {
    "name": "Recording"
  },
  "options": {
    "increments": true,
    "timestamps": true,
    "draftAndPublish": true
  },
  "attributes": {
    "File": {
      "model": "file",
      "via": "related",
      "allowedTypes": [
        "images",
        "files",
        "videos"
      ],
      "plugin": "upload",
      "required": false
    },
    "name": {
      "type": "string"
    }
  }
}

共有1个答案

狄楷
2023-03-14

留档实际上建议您将文件或blob(两者都应该工作)附加到FormData实例,而不是附加到data对象。

let blob = new Blob(recordingFile, { type: "audio/ogg" });
let file = new File([blob], 'recording.ogg');

const data = {
  "user" : "test",
};

const formData = new FormData();
formData.append('files.file', file);
formData.append('data', JSON.stringify(data));
 类似资料:
  • 问题内容: 我只想知道在Java或C#中是否有任何库或外部库中的构建允许我获取音频文件并对其进行解析并从中提取文本。 我需要创建一个应用程序,但是我不知道从哪里开始。 问题答案: 以下是您的一些选择: 微软演讲 光明 龙自然讲 狮身人面像4

  • IBM speech to text-我如何将MP3音频文件转换成字节数组,然后发送到IBM Watson服务器,使用speech to text API将音频转换成文本

  • 本文向大家介绍python3将视频流保存为本地视频文件,包括了python3将视频流保存为本地视频文件的使用技巧和注意事项,需要的朋友参考一下 使用python3+opencv3.3.1环境将视频流保存为本地视频文件,具体内容如下 1、利用opencv中的VideoCapture类获取视频流的链接,通过cv2的方法得到该视频流的帧数和每帧大小。 2、使用VideoWriter类进行视频编码 3、通

  • 我想把音频文件转换成base64只使用Javascript。 我们可以使用画布将图像转换为base64。但是我们如何转换音频文件。 任何帮助都将感激不尽。

  • 问题内容: 在过去的几天里,尝试使其正常工作时遇到了麻烦。但是我想要的是我们有一个可以通过网络发送原始数据的应用程序。然后,我读入此二进制数据并将其保存到wav(任何音频)文件中。稍后可以查看压缩。 所以有问题的代码: 也尝试过使用上述声明,但是我得到了例外:。因此,我认为正在发生的事情是因为我的流是原始音频数据,并且没有wave报头,所以抛出异常? 该文件确实可以成功写入,但是它都是静态的,是否

  • 是否可以下载一个YouTube视频,例如mp3,然后用FFMPEG将其转换为flac?我可以用--postprocessor-args指定ffmpeg在下载后使用的参数,但我不知道如何获得文件名。 这就是我想用的论点。这可能吗?