zer*_*r02 57 javascript audio html5 node.js
我正在使用node.js,我将我的音频流传输到我的node.js服务器.现在我注意到在构建音频blob的过程中:
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
Run Code Online (Sandbox Code Playgroud)
我在新的Blob上得到一个ReferenceError.似乎Blob不受支持.如何创建一个我想用node.js fs模块保存的blob.
多谢你们!
zer*_*r02 23
解决此问题的方法是创建一个可以在阵列缓冲区和节点缓冲区之间进行转换的函数.:)
将二进制NodeJS缓冲区转换为JavaScript ArrayBuffer
在最近的节点版本中它只是:
let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;
Run Code Online (Sandbox Code Playgroud)
Ric*_*all 14
从 Node.js 16 开始,Blob可以导入:
import { Blob } from "node:buffer"
new Blob([])
//=> Blob {size: 0, type: ""}
Run Code Online (Sandbox Code Playgroud)
否则,只需使用cross-blob:
import Blob from "cross-blob"
new Blob([])
//=> Blob {size: 0, type: ""}
// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob
Run Code Online (Sandbox Code Playgroud)
Max*_*rie 12
\n\n注意:此答案仅适用于您想遵循 Richie Bendall 的答案的情况。
\n
避免Blob从\'node:buffer\'导入。
相反,更喜欢像这样导入它(如NodeJS 文档中所述。(此处的实现示例)):
\nimport { Blob } from \'buffer\';\nRun Code Online (Sandbox Code Playgroud)\nRichie Bendall 的回答对我帮助很大。但似乎导入Blobfromnode:buffer破坏了 Jest 单元测试,引发此错误:
FAIL dist/tests/unit/users/getOneById.spec.js\n \xe2\x97\x8f Test suite failed to run\n\n ENOENT: no such file or directory, open \'node:buffer\'\n\n 2 | import config from \'../config/config\';\n 3 | import { getFileExt, getFileName, removeFile } from \'./file\';\n > 4 | import { Blob } from \'node:buffer\';\n | ^\n 5 |\n 6 | class PdfHelpers {\n 7 |\n\n at Runtime.readFile (node_modules/jest-runtime/build/index.js:2118:21)\n at Object.<anonymous> (src/helpers/pdf.ts:4:1)\nRun Code Online (Sandbox Code Playgroud)\n我没有尝试node:buffer用一些奇怪/棘手的代码来模拟导入,而是查看了 NodeJS 文档示例。所以它表明Blob可以从\'buffer\'
import { Blob } from \'buffer\';\n\n// ...\n\n// Only the import is changing, don\'t change your existing implementation\nconst blob = new Blob([buf], { type: \'application/pdf\' });\nRun Code Online (Sandbox Code Playgroud)\n所有 Jest 错误都已消失!
\n