有时需要将用户在IE上选择的数据另存为一定格式的文件,如.txt、.xls等。
一种方式是将请求发送给服务端,有服务端处理完成后作为响应发送给浏览器下载:
Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
Response.ContentEncoding = System.Text.Encoding.Default;
Response.ContentType = "text/plain";
Response.Write(data);
另一种方式是利用JavaScript 将浏览器上数据组织好,利用浏览器的另存为功能来实现:
var w = window.open("about:blank", "导出", "height=0,width=0,toolbar=no,menubar=no,scrollbars=no,resizable=on,location=no,status=no");
var dt = new Date();
w.document.charset = "gb2312";
w.document.write(exportData);
w.document.execCommand("SaveAs", false, dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + "-" + dt.getTime() +".txt");
w.close();
注意,SaveAs的方式虽然如上述代码设置了charset,但是默认浏览器仍然默认保存为unicode编码。如何才能有效指定保存格式为GB2312呢?
可以利用try catch是浏览器对编码设置生效:
var w = window.open("about:blank", "导出", "height=0,width=0,toolbar=no,menubar=no,scrollbars=no,resizable=on,location=no,status=no");
var dt = new Date();w.document.write(exportData);
try{
w.document.charset = "gb2312";
}
catch(err){ }
w.document.execCommand("SaveAs", false, dt.getFullYear() + "-" + (dt.getMonth()+1) + "-" + dt.getDate() + "-" + dt.getTime() +".txt");
w.close();
去掉try catch会怎么样呢?试验结果是窗口打开了,但是另存为的对话框没有出现。