Pracuję z node.js i przesłałem strumieniowo dźwięk na mój serwer node.js. Teraz zauważyłem podczas budowania bloba audio:
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
Że otrzymuję ReferenceError w nowym Blob. Wygląda na to, że Blob nie jest obsługiwany. Jak mogę utworzyć obiekt blob, który chciałbym zapisać za pomocą modułu node.js FS.
Dzięki chłopaki!
javascript
html
node.js
audio
zer02
źródło
źródło
mime
właściwość do właściwości,Buffer
ponieważ jest ona nadal dynamiczna. Ale typy MIME służą do przesyłania danych binarnych; nie tyle za zapisywanie na dysku.Odpowiedzi:
Rozwiązaniem tego problemu jest utworzenie funkcji, która może konwertować między buforami tablicy i buforami węzłów. :)
Przekonwertuj binarny bufor NodeJS na JavaScript ArrayBuffer
W ostatnich wersjach węzłów to po prostu:
let buffer = Buffer.from(arraybuffer); let arraybuffer = Uint8Array.from(buffer).buffer;
źródło
let arraybuffer
w twoim przykładzie równanew Blob
?ArrayBufferLike
wydaje się, że brakuje pewnych właściwości zBlob
: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
Po prostu użyj
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;
źródło
Innym rozwiązaniem do rozważenia jest użycie ciągu Base64 do przesyłania danych z serwera do klienta.
Pracuję nad projektem Node.js, w którym odbieram dane audio w postaci ArrayBuffer i chcę wysyłać i odtwarzać te dane w przeglądarce. Większość moich problemów wynikała z próby wysłania ArrayBuffer do klienta lub próby przekonwertowania ArrayBuffer i wysłania bufora.
To, co okazało się dla mnie prostym rozwiązaniem, to
Użyłem base64-arraybuffer do wykonania konwersji ArrayBuffer> Base64 String (choć może to być proste bez pakietu).
Użyłem wskazówek stąd aby stworzyć element audio po stronie klienta.
* Nie zrobiłem zbyt wiele w zakresie testowania limitów - więc nie wiem, jak to poradzi sobie z dużymi plikami audio.
źródło
Jako sugestię możesz przeczytać to: http://howtonode.org/really-simple-file-uploads
Chyba nie wiem, co próbujesz zrobić. Może nie być modułu dla obiektów blob, ale jeśli chcesz po prostu zapisać coś na dysku, jest moduł fs .. Ten kod nie będzie działał bezpośrednio, ale ...
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(); });
Po prostu wyślij plik mp3 lub cokolwiek naprawdę, do / załaduj, a zapisze to na dysku. Możesz zrobić, co chcesz.
źródło