Ich arbeite mit node.js und habe mein Audio auf meinen node.js-Server gestreamt. Jetzt bemerkte ich beim Erstellen des Audio-Blobs:
var audioBlob = new Blob([dataview], { type: 'audio/wav' });
Dass ich bei neuem Blob einen ReferenceError bekomme. Es scheint, dass Blob nicht unterstützt wird. Wie kann ich einen Blob erstellen, den ich mit dem Modul node.js fs speichern möchte?
Danke Leute!
javascript
html
node.js
audio
zer02
quelle
quelle
mime
Eigenschaft hinzufügen ,Buffer
da diese noch dynamisch ist. MIME-Typen dienen jedoch zur Kommunikation von Binärdaten. nicht so sehr zum Speichern auf der Festplatte.Antworten:
Die Lösung für dieses Problem besteht darin, eine Funktion zu erstellen, die zwischen Array-Puffern und Knotenpuffern konvertieren kann. :) :)
Konvertieren Sie einen binären NodeJS-Puffer in JavaScript ArrayBuffer
In neueren Knotenversionen ist es nur:
let buffer = Buffer.from(arraybuffer); let arraybuffer = Uint8Array.from(buffer).buffer;
quelle
let arraybuffer
in deinem Beispiel gleichnew Blob
?ArrayBufferLike
scheint bestimmte Eigenschaften zu fehlen vonBlob
: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
Verwenden Sie einfach
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;
quelle
Eine andere zu berücksichtigende Lösung besteht darin, eine Base64-Zeichenfolge zu verwenden, um Daten vom Server zum Client zu übertragen.
Ich arbeite an einem Node.js-Projekt, bei dem ich Audiodaten in Form eines ArrayBuffers empfange und diese Daten im Browser senden und wiedergeben möchte. Die meisten meiner Probleme waren auf den Versuch zurückzuführen, den ArrayBuffer an den Client zu senden oder den ArrayBuffer zu konvertieren und einen Puffer zu senden.
Was für mich eine einfache Lösung war, war zu
Ich habe base64-arraybuffer verwendet , um die Konvertierung von ArrayBuffer> Base64 String durchzuführen (es kann jedoch einfach sein, dies ohne ein Paket zu tun).
Ich habe Tipps von hier verwendet , um das Audioelement auf der Clientseite zu erstellen.
* Ich habe beim Testen von Grenzwerten nicht viel getan - daher weiß ich nicht, wie dies mit großen Audiodateien umgehen kann.
quelle
Als Vorschlag möchten Sie vielleicht Folgendes lesen: http://howtonode.org/really-simple-file-uploads
Ich glaube, ich weiß nicht, was Sie versuchen zu tun. Es gibt möglicherweise kein Modul für Blobs, aber wenn Sie nur etwas auf die Festplatte schreiben möchten, gibt es das fs-Modul. Dieser Code funktioniert nicht direkt, aber ..
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(); });
Posten Sie einfach eine MP3-Datei oder etwas wirklich zum Hochladen und schreiben Sie sie auf die Festplatte. Sie können jede gewünschte Validierung durchführen.
quelle