检索音频 - 二进制文件 - 存储在我的 Mlab 中

2023-12-02

基本上,我已经使用 MediaDevices.getUserMedia WebRTC API 设置了一个应用程序。我已经录制了音频,理论上一切都很好。但我现在必须检索音频来听他们的声音。

我现在想知道如何在我的 MongoDB 数据库中下载音频帖子。我尝试导出 MongoDB 数据库,但只收到 JSON 或 CSV 文件,而不是音频文件。

我听说过 gridFS,但仅限于图像处理上下文。在深入研究 gridFS 之前,我想了解一下您对使用 Mlab 进行音频检索的想法。以及更广泛的 MongoDB。 另外,gridFS 似乎是为大文件设计的,但就我而言,我只想存储数百字节的小文件,所以 gridFS 似乎有点过头了?也许有更有效的解决方案?

编辑:我很难翻译我的数据以便将其存储在我的数据库中。

到目前为止,我的控制台返回了我:

XML Parsing Error: syntax error

这是我的 App.js :

// post section

async handleSubmit(e){

e.preventDefault();

Axios.post("/api/words",{

"sound":this.state.blob

})

//.then((res) => res.json())

.then((data) => console.log(data))

//pass submitted value to true in order to declench allDelete function

}


(...) 


// blob formatting section :

saveAudio() {

// convert saved chunks to blob

const blob = new Blob(this.chunks, {type: audioType});

this.setState({blob : blob})

Thanks.


对于小于 16 MB 的文件,不需要 GridFS。您可以使用以下方法直接将二进制数据存储在 MongoDB 中BSON的二进制类型或对二进制数据进行编码并将其存储为字符串。将二进制数据存储为字符串时,Base64 是常见的编码选择。

从数据库中检索数据后,可以使用以下命令将其写入文件fs.writeFile.

如果您将数据保存为二进制类型,则可以传递buffer to fs.writeFile。如果您将数据保存为编码字符串,则可以传递一个字符串和一个encoding选项。

(如果您想使用 Express 提供文件,您可以设置内容类型并使用res.send)

这是 NodeJS 中的一个小例子。这将从磁盘读取音频文件,将其作为二进制类型保存到 MongoDB 数据库(使用 MongoDB 驱动程序的Binaryclass),从数据库检索它,并将其写入磁盘上的新文件。

const mongodb = require('mongodb')
const util = require('util')
const fs = require('fs')
const readFile = util.promisify(fs.readFile)
const writeFile = util.promisify(fs.writeFile)

async function main() {
  const client = await mongodb.MongoClient.connect(process.env.MONGO_URI)
  console.log('connected')

  let db = await client.db('dbname')

  // Reading in binary data from a file. data is a buffer.
  let data = await readFile(__dirname + '/sample.mp3')

  // Insert binary data to the database
  let res = await db.collection('coll').insert({data: new mongodb.Binary(data)})
  console.log(res)
  let objectId = res.ops[0]._id

  // Retrieve binary data from the database
  let obj = await db.collection('coll').findOne({_id: objectId})
  console.log(obj)

  // *** This is the key part ***
  // use obj.data.read to get a buffer from the binary data and write that buffer to a file
  await writeFile(__dirname + '/out.mp3', obj.data.read(0, obj.data.length()))

  console.log('done')
}

main()

尽管人们确实将二进制数据存储在数据库中,但人们最常见的可能是将文件存储在文件系统或对象存储(例如 Amazon S3)中。然后,他们只需在数据库中存储该文件的链接,并使用该链接检索该文件。您可以做任何您觉得更舒服的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检索音频 - 二进制文件 - 存储在我的 Mlab 中 的相关文章

  • 使用 node.js 和 socket.io 阻止 CORS

    我最近开始学习node js和socket io 我遵循了 socket io 的简单教程 在我的计算机上运行时一切正常 但是 我决定将客户端部分上传到服务器进行测试 这就是问题开始的地方 我想在网络主机上运行聊天客户端 并在我的计算机或其
  • Aptana Studio 有 NodeJS 插件吗?

    Aptana Studio 有 NodeJS 插件吗 至少对于 NodeJS 代码辅助来说是这样 也许是创建 NodeJS 项目的一种方法 以及本地NodeJS调试 目前我们没有 NodeJS 支持 如果社区对此感兴趣 那么提交功能请求并对
  • 从查询更新最后一个文档时遇到问题

    您好 我是 Mongodb 的新手 我目前正在尝试更新查询结果中的最后一个文档 但遇到问题 我知道如何使用获取最后一个文档 db collection find sort natural 1 limit 1 但我该如何更新呢 我尝试这样做
  • Mongoose 填充与对象嵌套

    使用之间是否有任何性能差异 查询的处理时间 猫鼬种群 http mongoosejs com docs populate html和直接对象包含 每种应该什么时候使用 猫鼬种群示例 var personSchema Schema id Nu
  • 如何将缓冲区包装为stream2可读流?

    如何使用stream2接口将node js缓冲区转换为可读流 我已经找到了这个answer https stackoverflow com questions 13230487 converting a buffer into a read
  • 如何使用 webRTC 禁用系统音频增强?

    在不同的系统 Windows Android 等 上有一些 内置 音频增强功能 例如 AEC 自动回声消除 NR 降噪 和自动增益控制 每个人都可以以任意组合关闭或打开这些功能 某些浏览器上还有音频增强功能 我知道 Chrome 和 Fir
  • 使用 Flask 和 MongoEngine 跟踪 Tumblelog 应用程序时出错

    我正在关注 tumbleblog 应用程序here http docs mongodb org ecosystem tutorial write a tumblelog application with flask mongoengine
  • 将 React 应用程序作为后台进程运行

    我对部署前端代码完全陌生 因此提出了这个问题 我有一个 React 应用程序 需要作为后台进程运行 但是我对如何执行此操作有点困惑 我运行一个 npm 脚本 npm run build 在服务器上构建 缩小和服务项目 构建过程的相关代码是这
  • 安装 gulp browserify 总是报错

    我尝试使用以下命令安装 gulp browserify npm install gulp browserify save dev 我已经成功安装了许多其他软件包 例如 gulp autoprefixer gulp concat gulp m
  • Puppeteer - 错误:协议错误 (Network.getResponseBody):找不到具有给定标识符的资源

    我正在尝试使用此代码使用 puppeteer 从网站获取响应正文 usr bin env node require dotenv config const puppeteer require puppeteer const readline
  • Eslint 不忽略 node_modules 文件夹

    不知何故更新后Babel from 6 to 7 my eslint开始发出这样的警告node modules 所以 根据我的理解node modules文件夹不会被忽略 这就是问题出现的原因 所以 通读eslint docs https
  • RSA Java 加密和 Node.js 解密不起作用

    我有一个系统 需要在 javascript 中生成 RSA 密钥对 然后将公钥存储在服务器端的数据库中 作为字符串 然后 Java 中的服务器端将使用存储的公钥对字符串进行加密密钥并将其发送到客户端 客户端将使用私钥解密该字符串 我在客户端
  • 使用 mongoDB 插入子文档

    我收集了以下文件 id 2 workspace name 1 widgets name 2 widgets name 3 widgets name 4 widgets 我怎样才能插入 id 1 blabla blabla 在 小部件 中的
  • MediaDevices.getUserMedia() 如何设置音频约束(采样率/位深度)?

    使用浏览器 Web API 我想设置MediaDevices getUserMedia 限制条件属性 适合记录音频语音 语音消息 例如设置这些参数 mono 16bit 16KHz 这是我的代码 const mediaStreamConst
  • AudioQueueStart 报告不支持的格式

    我试图让音频队列在 iPhone 应用程序上工作 每当调用 AudioQueueStart 时 它都会给出 fmt 结果代码 kAudioFormatUnsupportedDataFormatError 在下面的代码中 我将格式设置为 kA
  • 有人可以解释这个错误:表达式语句不是赋值或调用

    我有这两块代码 socket on chatMessage function message message type message message created Date now message username socket req
  • NodeJS:创建 zip,但在磁盘上,而不是在内存中

    我需要创建一个包含大约 1GB 数据的 zip 文件 但该数量将来会增加 最初我用 AdmZip 构建了这个 但由于我们的虚拟机没有大量内存 也不需要它 除了创建这个 zip 文件时 所以我不想扩展 它运行内存不足并崩溃 然后我重建了该过程
  • npm 安装完成时播放声音或通知

    我在想 在 npm 完成运行任务 例如长时间安装 后获取通知 声音或弹出窗口 会有所帮助且高效吗 我正在使用 vscode 并在集成终端中运行大部分命令 在等待它完成的过程中 我最终花费了更多时间来执行其他非生产性任务 所以我们可以把它分解
  • 自定义AWS ElasticBeanstalk NodeJS安装(使用yarn)

    是否可以配置 EBS 使用纱线包管理器而不是 NPM 安装我的 Node JS 应用程序 我已经找到了一个方法 但是有点hacky 创建一个 ebextensions yarn config file 名称不必是 yarn 将此内容放入文件
  • Heroku 无法获取 /

    我是 Heroku 的新手 相信我正在按照 Heroku 网站上概述的所有步骤通过 node js 进行部署 https devcenter heroku com articles getting started with nodejs h

随机推荐

  • 无法启动组件 [StandardEngine[Catalina].StandardHost[localhost]

    当尝试启动 tomcat 时 出现此错误 这可能是什么原因造成的 我浏览了很多类似的帖子 但找不到任何内容 我正在使用阿帕奇汤姆猫 v8 0和 JRE 1 8 0 java util concurrent ExecutionExceptio
  • 如何暂停applescript的执行一段时间?

    我在 Automator 中有一个小 applescript do shell script osascript Focus On scpt delay 60 do shell script osascript Focus Off scpt
  • 需要帮助将 qsort 与结构数组一起使用

    现在 我看到了各种例子 但我不明白它们的意思 这是我的结构 typedef struct profile char gender 1 double soc PROFILE 其中 soc 是我要排序的社会安全号码 我知道你需要一个比较函数 但
  • 构建一个没有源代码的linux模块

    我只是想知道 是否可以在没有源代码的情况下构建 插入模块 假设我下载了一个 openSuse 操作系统 但没有附带内核源代码 如何在不重新编译内核的情况下编译模块并插入模块 对于没有内核源码的openSuse来说 想要找到完全相同版本的源码
  • 传递给 sed 命令的 -n 参数有何意义?

    有人可以告诉我怎么做吗sed n 1 p工作 下面是我用来根据分配的节点对 k8s 中的 pod 进行排序的完整命令 kubectl get pods o wide all namespaces sort k8 r sed n 1 p 上面
  • 初始化二维数组而不指定大小

    我可以在 c 中初始化一维数组 无论是否初始化其大小 int x 1 2 3 4 5 int y 5 1 2 3 4 5 但是 当我尝试对二维数组执行相同操作时 例如 int x 1 2 3 4 5 6 我得到一个error array t
  • 为什么串口在Unity中不能正常工作?

    我需要帮助 我很绝望 在两周的时间里 我一直在研究我的项目 该项目使用串行端口通信 PIC 串行板 我必须设置连接 但无法从 COM 端口获取数据 我读过一些论坛 问题的原因似乎是执行不完整系统 IO 端口类 当我尝试获取 COM 端口的数
  • 何时使用:htmlspecialchars? [复制]

    这个问题在这里已经有答案了 我需要使用以下方法将字符串转换为特殊字符 htmlspecialchars 我的问题是 我应该在将数据提交到数据库之前对其进行转换 还是应该在显示数据之前对其进行转换 您应该在将数据插入数据库之前对其进行清理 并
  • 解释 Mike Bostock 的 d3.js Dragmove 函数

    我目前正在尝试在 d3 脚本中创建可拖动行为 我正在研究迈克博斯托克的例子 http bl ocks org mbostock 1557377 这是有问题的函数 function dragmove d d3 select this attr
  • 编译错误:需要标识符

    import java io public class details BufferedReader in new BufferedReader new InputStreamReader System in System out prin
  • 将字符串转换为浮点数 SQLAlchemy

    从数据库读取时有什么方法可以将字符串转换为浮点数吗 所以我的专栏size由字符串值组成 即 45 当我使用 SQL Alchemy 查询数据库时 如何获取浮点值 我知道最简单的方法是float value 但如果该值为NULL我需要处理捕获
  • Android 模拟器上的蓝牙支持

    我想知道制作模拟器的开发团队是否有一些信息可以使蓝牙在 Android 模拟器中工作 指出一些有关它的链接 他们是否有发布日期或者他们是否会使其在未来工作 据我所知 模拟器不支持蓝牙 我将不得不在一些课程中教授安卓和蓝牙 学生需要在 And
  • 查找当前文件夹的路径 - cmd

    我使用此脚本查找当前文件夹及其 bat 文件 for f i in 0 do set curpath dpi echo curpath 如果路径包含空格 它无法正常工作 D Scripts All Scripts gt 仅检索 D Scri
  • 无法播放 mp4 转换后的文件 - JavaFX 2.1

    我已经转换了我的 mov视频到 mp4 但是当我在 javafx 应用程序中播放视频时 它不起作用 我可以听到视频文件的音频 但没有图片 也许 mp4 的编解码器不正确 有什么想法或解决方案吗 UPDATE 使用相同的代码 我在相同的条件下
  • Swagger Gateway 微服务聚合

    我正在使用 SpringBoot 开发一个微服务应用程序 有面向公众的网关微服务 它将请求重定向到特定的微服务 在不同的主机上运行 现在 我有多个微服务 每个微服务都使用 Swagger 公开了它们的 API 我们希望为公共客户聚合所有这些
  • 如何从 extjs 4 商店获取数据

    我一开始就使用 ext js 4 我试图在使用 store 启动应用程序时获取当前用户数据 但我没有从商店获取任何数据 甚至 store count 返回 0 我发现很多描述如何创建存储 但没有描述如何访问其中的数据 我设法使用 Ext a
  • 以语义方式填充元组列表

    我正在编写一段代码 我必须处理元组列表 其中 键 的顺序和名称 fst元组的 s 匹配某个模板 我通过验证并 如果需要 根据输入生成有效列表来实现容错 这是我的意思的一个例子 给定密钥模板 hello world this is a tes
  • 如何在 Lotus Domino 上设置 CORS?

    我尝试通过跨域请求通过 REST 与 Domino 进行通信 但遇到了问题 我已经设置了一个 Internet 站点文档 其中包含 IP 地址 本地主机和作为主机名列出的服务器名称 该网站正在按照我在该网站上设置的重定向规则运行 我还使用以
  • 添加到 CodeBehind 的代码未执行

    我对 Umbraco 很陌生 我仍在摸索它的工作方式 所以我完全有可能错过了一些非常明显的东西 我被要求修改 MasterPage 上滑块的功能 我发现滑块的标记位于 MasterPage 的 cs 文件中 void CreateSlide
  • 检索音频 - 二进制文件 - 存储在我的 Mlab 中

    基本上 我已经使用 MediaDevices getUserMedia WebRTC API 设置了一个应用程序 我已经录制了音频 理论上一切都很好 但我现在必须检索音频来听他们的声音 我现在想知道如何在我的 MongoDB 数据库中下载音