我编写的代码解析从Firebase返回的字典,其中包含使用base64编码的图像。我希望它只是简单地将这些图像写入文件,但确实如此,但在写完后我收到以下错误:
smalloc.cc:280: void node::smalloc::SliceOnto(const v8::FunctionCallbackInfo<v8::Value>&): Assertion `end <= source_len' failed.
这是我的代码:
// Iterate through each key in each page if each request
for (var key in request) {
var obj = request[key];
if (typeof (obj) == "object") {
for (var prop in obj) {
item++;
if(obj.hasOwnProperty(prop)) {
switch (prop) {
case "img":
var media = new ReceivedMedia(obj[prop]);
var filename = transaction.tid + "-" + item + "." + media.extension;
filename = filename.slice(10);
require('fs').writeFileSync(filename, media.b64, 'base64', function(err) {
if (err) throw err;
});
break;
}
}
}
}
}
我的图片很好,但错误有点奇怪,我宁愿不发生。有人会知道为什么会这样吗?这将是非常有用的:)
注意:ReceivedMedia
是我定义为的类:
function ReceivedMedia(media) {
this.b64 = media.b64;
this.extension = media.extension;
this.posx = media.posx;
this.posy = media.posy;
}
附带问题:如果我使用writeFile
代替writeFileSync
我的某个图片已损坏而另一个图片未包含任何数据。如果在那之后我再次运行我的节点脚本,文件保存正确。我还想解释为什么会发生这种情况,根据我的理解,其中一个是同步的(writeFileSync
我在猜测)而另一个是异步的(writeFile
我假设)。
答案 0 :(得分:1)
Google搜索您的错误消息说明this discussion of the issue in io.js和this discussion in node.js,这听起来像是一个已修复的错误(不确定修补程序是否已在完整版本中发布) 。
node.js修复程序为here。
如果您现在已经在自己的版本中彻底修复它,那么您必须将修复程序应用于您自己的代码树并重建它。否则,您将不得不调查或询问此修复程序何时进入正式版本(我个人不确定该过程对node.js的作用)。