私はこのようなデータURLを持っています:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
これをバイナリデータ(たとえば、Buffer
)として取得してファイルに書き込むことができるようにする最も簡単な方法は何ですか?
'base64'エンコーディングを使用してデータをバッファに入れ、これをファイルに書き込みます。
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);
これを試して
var dataUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
var buffer = new Buffer(dataUrl.split(",")[1], 'base64');
最近、このような質問(データURLの解析と検証)にも遭遇し、次の回避策を見つけました:https ://gist.github.com/bgrins/6194623
コードでデータURLを簡単に操作できるように、2つのパッケージを作成しました。ここにあります:
https ://github.com/killmenot/valid-data-url
https://github.com/killmenot/parse-data-url
例を確認してください
私はNode.jsのソースを調べていて、データURLをにデコードするこのコードBuffer
に出くわしました。この関数は公開されておらず、エンコードされたESモジュールを解析することのみを目的としていますが、他の回答では明らかに考慮されていないデータURLの側面に光を当てます。データURLのコンテンツはbase64エンコードであってはならず、URLエンコードされている可能性があります。エンコードされていない場合もあります。
基本的に、Node.jsロジックは、以下のコードとエラー処理のようなものに要約されます。
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');
これにより、次の内容のJavascriptファイルのさまざまなエンコーディングが正しく処理されますconsole.log("Node.js");
。
結果のバッファは、必要に応じて。で文字列に変換できますbuffer.toString()
。
この方法は私のために働きます
function dataURItoBlob(dataURI) {
// convert base64 to raw binary data held in a string
var data = dataURI.split(',')[1];
var byteString = Buffer.from(data, "base64");
// separate out the mime component
var mimeString = dataURI.split(",")[0].split(":")[1].split(";")[0];
// write the ArrayBuffer to a blob, and you're done
var blob = new Blob([byteString], { type: mimeString });
return blob;
}
使用する
var uri = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==';
dataURItoBlob(uri)