2013-07-30 30 views
0

我有一个用JavaScript编写的应用程序,可让用户将图像保存到其磁盘。这涉及node.js.如果我要求覆盖以前保存的图像,当涉及从操作系统发出警告以覆盖文件时,我会得到混合结果。如果我试图通过从保存文件对话框中选择旧图像来覆盖图像,它会提示警告。如果我通过简单地键入相同的文件名覆盖图像,它会覆盖图像,但不会给出任何警告。使用node.js保存图像时覆盖文件警告

Node.js的功能:

var fs = require('fs'); 
exports.buildFile = function(name, value) { 
    if (name.search(/\.[a-z]+/) == -1) { 
     name = name + ".png"; 
    } 
    var img = new Buffer(value, encoding='base64'); 
    fs.writeFile(name, img, function(err) { 
     if(err) { 
      console.log(err); 
     } else { 
      console.log("The file was saved!"); 
     } 
    }); 
}; 

只检查,如果用户指定的文件类型,如果没有,追加巴纽并写入磁盘。

前端:

var global_imageToSave = null; 
function screen_shot(fn) { 
    global_currModel.menuShouldHide = true; 
    global_currModel.setTextDeletables(false,true); 

    html2canvas($('body'), { 
     onrendered: function(canvas) { 
     global_imageToSave = canvas.toDataURL("image/png").split(',')[1]; 
     global_currModel.menuShouldHide = false; 
     global_currModel.draw(); 
     sc.buildFile(fn, global_imageToSave); 
     } 
    }); 
} 

用途html2canvas采取截屏,然后通过这些数据和文件名从HTML对话框收到。

HTML对话框onchange事件:

$('[id^="model_sales_asset"]').live("pagecreate", function() { 
    $(this).find('.fileDialog').change(function() {screen_shot($('.fileDialog').val());}); 
}); 

正如你所看到的文件类型为以操作系统来保存文件的任何调用之前被追加所以我想不通为什么它的文件名,只有当它是相匹配通过选择文件自动输入。

此行为在Windows 7和8以及mac os 10.7上是一致的。

回答

0

问题不在于名称,而是我相信的文件。 html2canvas和普通文件上传的编码不同。我认为OS在一种情况下检测到文件的修订版本,而在另一种情况下是完全不同的文件。

最好的建议是自己做检测,这是正确的方法。检查文件是否存在,然后吐出警告。否则,你会得到不同的结果与不同的系统和插件。

+0

我虽然这样,并担心它会导致有时得到一个警告,有时会得到两个,一个来自我和一个来自操作系统。你知道我是否可以压制OS? –