46

私はこのようなデータURLを持っています:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...

これをバイナリデータ(たとえば、Buffer)として取得してファイルに書き込むことができるようにする最も簡単な方法は何ですか?

4

5 に答える 5

74

'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);
于 2012-07-04T21:12:00.357 に答える
29

これを試して

var dataUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
var buffer = new Buffer(dataUrl.split(",")[1], 'base64');
于 2014-06-04T18:14:26.083 に答える
3

最近、このような質問(データURLの解析と検証)にも遭遇し、次の回避策を見つけました:https ://gist.github.com/bgrins/6194623

コードでデータURLを簡単に操作できるように、2つのパッケージを作成しました。ここにあります: https ://github.com/killmenot/valid-data-url
https://github.com/killmenot/parse-data-url

を確認してください

于 2016-05-10T10:32:30.307 に答える
1

私は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");

  • data:text / javascript、console.log( "Node.js");
  • data:text / javascript、console.log(%22Node.js%22)%3B
  • data:text / javascript; base64、Y29uc29sZS5sb2coIk5vZGUuanMiKTs =

結果のバッファは、必要に応じて。で文字列に変換できますbuffer.toString()

于 2021-10-17T13:25:37.250 に答える
0

この方法は私のために働きます




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)

于 2022-02-28T04:35:10.847 に答える