信息交流、传播、提炼

nice to meet you

博客园 首页 新随笔 联系 订阅 管理

有时需要将用户在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会怎么样呢?试验结果是窗口打开了,但是另存为的对话框没有出现。

 

posted on 2011-12-22 19:25  seeyou  阅读(5190)  评论(0)    收藏  举报