Node.js无法创建Blob?

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)

  • 您的示例中的“let arraybuffer”等于“new Blob”吗? (11认同)
  • 嗨,我需要和你一样,但我不明白你的解决方案.我有这个var audioBlob = new Blob([dataview],{type:'audio/mp3'}); 但是在你的例子中使用"arrayBuffer"变量 (8认同)
  • 这是我在堆栈溢出上看到的最令人困惑的答案之一。 (7认同)
  • 这个答案停止于创建数组缓冲区。然后呢? (2认同)
  • 使用与问题中使用的变量名称相同的变量名称,以便我们确切地知道如何转换代码不是更好吗? (2认同)

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)

  • Blob 是 cross-blob 的默认导出,它只是 `import Blob from 'cross-blob'` (2认同)

Max*_*rie 12

\n
注意:此答案仅适用于您想遵循 Richie Bendall 的答案的情况。
\n
\n

简短回答:

\n

避免Blob\'node:buffer\'导入。

\n

相反,更喜欢像这样导入它(如NodeJS 文档中所述。(此处的实现示例)):

\n
import { Blob } from \'buffer\';\n
Run Code Online (Sandbox Code Playgroud)\n

长答案:

\n

Richie Bendall 的回答对我帮助很大。但似乎导入Blobfromnode:buffer破坏了 Jest 单元测试,引发此错误:

\n
 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)\n
Run Code Online (Sandbox Code Playgroud)\n

我没有尝试node:buffer用一些奇怪/棘手的代码来模拟导入,而是查看了 NodeJS 文档示例。所以它表明Blob可以从\'buffer\'

\n
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\' });\n
Run Code Online (Sandbox Code Playgroud)\n

所有 Jest 错误都已消失!

\n