我有一个用 javascript 编写的应用程序,可以让用户将图像保存到他们的磁盘。这涉及 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!");
}
});
};
只需检查用户是否指定了文件类型,如果没有,则附加 .png 并写入磁盘。
前端:
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 上是一致的。