Ich habe eine Daten-URL wie diese:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
Was ist der einfachste Weg, um diese als Binärdaten (zum Beispiel ein Buffer
) zu erhalten, damit ich sie in eine Datei schreiben kann?
Ich habe eine Daten-URL wie diese:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
Was ist der einfachste Weg, um diese als Binärdaten (zum Beispiel ein Buffer
) zu erhalten, damit ich sie in eine Datei schreiben kann?
Geben Sie die Daten unter Verwendung der Codierung "base64" in einen Puffer ein und schreiben Sie sie dann in eine Datei:
var fs = require('fs');
var string = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
var regex = /^data:.+\/(.+);base64,(.*)$/;
var matches = string.match(regex);
var ext = matches[1];
var data = matches[2];
var buffer = Buffer.from(data, 'base64');
fs.writeFileSync('data.' + ext, buffer);
Ich bin vor kurzem auf ähnliche Fragen (Parsing und Validieren von Daten-URLs) gestoßen und habe folgenden Workaround gefunden: https://gist.github.com/bgrins/6194623
Ich habe 2 Pakete erstellt, um die Arbeit mit Daten-URLs im Code zu erleichtern. Hier sind sie: https://github.com/killmenot/valid-data-url
https://github.com/killmenot/parse-data-url
Schau dir Beispiele an
Ich habe mir die Quellen von Node.js angesehen und bin auf diesen Code gestoßen, der eine data URL in einen Buffer
decodiert. Obwohl die Funktion nicht öffentlich ist und ausschließlich zur Analyse von codierten ES-Modulen gedacht ist, beleuchtet sie Aspekte von data URLs, die offensichtlich von einigen anderen Antworten nicht berücksichtigt werden: der Inhalt von data URLs muss nicht base64 codiert sein und kann URL-codiert sein, und er kann sogar nicht codiert sein.
Im Wesentlichen läuft die Node.js-Logik auf etwas Ähnliches wie den unten stehenden Code hinaus, plus Fehlerbehandlung:
const parsed = new URL(url);
const match = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/.exec(parsed.pathname);
const { 1: base64, 2: body } = match;
const buffer = Buffer.from(decodeURIComponent(body), base64 ? 'base64' : 'utf8');
Dies wird unterschiedliche Encodings einer Javascript-Datei mit dem Inhalt console.log("Node.js");
korrekt verarbeiten:
Der resultierende Buffer kann bei Bedarf in einen String umgewandelt werden mit buffer.toString()
.
Diese Methode funktioniert für mich
function dataURItoBlob(dataURI) {
// Konvertiere Base64 in rohe binäre Daten, die in einem String gehalten werden
var data = dataURI.split(',')[1];
var byteString = Buffer.from(data, "base64");
// Trenne den Mime-Bestandteil ab
var mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
// Schreibe das ArrayBuffer in einen Blob und du bist fertig
var blob = new Blob([byteString], { type: mimeString });
return blob;
}
Verwendung
var uri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
dataURItoBlob(uri)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.