Estoy trabajando con node.js y transmití mi audio a mi servidor node.js. Ahora noté durante el proceso de construcción del blob de audio:
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
Que obtengo un ReferenceError en el nuevo Blob. Parece que Blob no es compatible. ¿Cómo puedo crear un blob que me gustaría guardar con el módulo node.js fs?
¡Gracias chicos!
javascript
html
node.js
audio
zer02
fuente
fuente
mime
propiedad alBuffer
ya que sigue siendo dinámico. Pero, los tipos MIME son para comunicar datos binarios; no tanto por guardar en disco.Respuestas:
La solución a este problema es crear una función que pueda convertir entre Array Buffers y Node Buffers. :)
Convierta un búfer binario NodeJS en JavaScript ArrayBuffer
En las versiones recientes de nodos es solo:
let buffer = Buffer.from(arraybuffer); let arraybuffer = Uint8Array.from(buffer).buffer;
fuente
let arraybuffer
en su ejemplo igual anew Blob
?ArrayBufferLike
parece que le faltan ciertas propiedades deBlob
:ts Argument of type 'ArrayBufferLike' is not assignable to parameter of type 'File | Blob'. Type 'ArrayBuffer' is not assignable to type 'File | Blob'. Type 'ArrayBuffer' is missing the following properties from type 'Blob': size, type, arrayBuffer, stream, text
Solo usa
cross-blob
:const Blob = require("cross-blob"); new Blob([]); //=> Blob {size: 0, type: ""} // Global patch (to support external modules like is-blob). globalThis.Blob = Blob;
fuente
Otra solución a considerar es utilizar una cadena Base64 para transferir datos desde el servidor al cliente.
Estoy trabajando en un proyecto de Node.js donde recibo datos de audio en forma de ArrayBuffer y quiero enviar y reproducir esos datos en el navegador. La mayoría de mis problemas surgieron al intentar enviar ArrayBuffer al cliente o intentar convertir ArrayBuffer y enviar un Buffer.
Lo que terminó siendo una solución simple para mí fue
Utilicé base64-arraybuffer para realizar la conversión ArrayBuffer> Base64 String (aunque puede ser sencillo hacerlo sin un paquete).
Usé consejos de aquí para crear el elemento de audio en el lado del cliente.
* No he hecho mucho en cuanto a probar los límites, por lo que no sé cómo esto podría manejar archivos de audio grandes.
fuente
Como sugerencia, es posible que desee leer esto: http://howtonode.org/really-simple-file-uploads
Quiero decir, supongo que no sé lo que estás intentando hacer. Puede que no haya un módulo para blobs, pero si solo desea escribir algo en el disco, está el módulo fs. Este código no funcionará directamente, pero ...
var fs = require('fs') , express = require('express') app.post('/upload', function (req, res) { // asynch call to write file to disk fs.write("/tmp/file.mp3", req.params.body, function (err) { if (err) console.log(err) }); res.end(); });
Simplemente publique un mp3, o cualquier cosa en realidad, en / upload, y lo escribirá en el disco. Puede hacer la validación que desee.
fuente