2012-07-04 32 views
24

我有这样一个数据URL:如何解析Node中的数据URL?

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

是什么让这个作为二进制数据最简单的方法(比如,Buffer),这样我就可以把它写入一个文件?

回答

52

把数据放到一个缓冲区使用“的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 = new Buffer(data, 'base64'); 
fs.writeFileSync('data.' + ext, buffer); 
+0

如果有什么它不是一个PNG? –

+1

替换适当的文件扩展名?这只是一个例子,一般的解决方案是:(1)在'data:whatever/whatever; base64',part,(2)将它放入一个使用'base64'的Buffer中,(3)写这个到一个文件。如果MIME类型不同,请使用不同的文件扩展名/使用正则表达式/等等。 –

+3

'var data = string.substr(string.indexOf('base64')+ 7)''? –

17

试试这个

var dataUrl = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; 
var buffer = new Buffer(dataUrl.split(",")[1], 'base64');