【发布时间】:2010-12-02 04:19:45
【问题描述】:
我正在开发一个基于用户输入生成输出列表的应用程序(ASP.NET、Webforms)。我想允许用户将所述列表的内容保存为文本文件,或者可能保存为其他文件类型,例如 .csv。解决这个问题的最佳方法是什么?可以用Javascript在客户端完成吗?
【问题讨论】:
标签: c# javascript asp.net vb.net text-files
我正在开发一个基于用户输入生成输出列表的应用程序(ASP.NET、Webforms)。我想允许用户将所述列表的内容保存为文本文件,或者可能保存为其他文件类型,例如 .csv。解决这个问题的最佳方法是什么?可以用Javascript在客户端完成吗?
【问题讨论】:
标签: c# javascript asp.net vb.net text-files
我认为您需要使用 ActiveX 或 Java Applets 或 Silverlight 来执行类似的操作。 JavaScript 无权访问本地文件系统。
解决此问题的另一种方法是在服务器上(物理或动态)创建一个文件,并使其可供用户下载。这将使他进入保存文件对话框。
要即时执行此操作,请创建一个空白页面(没有任何标记。甚至没有),设置Response.ContentType = 'text/plain' 并使用Response.Write() 将您的内容写入Page_Load。
【讨论】:
您可以通过构造和打开data URI,纯粹在客户端JavaScript 中生成纯文本或csv 文件。
使用 jQuery 的示例:
window.open(
'data:text/csv;charset=utf-8,' +
escape(
$('#yourlist li') // <- selector for source data here
.map(function(){
// format row here
return $(this).text();
})
.get()
.join('\r\n')
)
);
不幸的是,由于在 IE8 之前缺乏对数据 URI 的支持以及曾经的安全限制 IE added support for data URIs,因此这种技术在 IE 中不起作用。您必须对 IE 使用另一种技术,或者再次访问服务器,或者使用 ActiveX / Silverlight / Flash / Java Applet 来避免可能已经在客户端上的数据的往返。
【讨论】:
text/plain 的媒体类型,它会显示它,但对于text/csv 这样的媒体类型,浏览器会将其交给浏览器。 application/octet-stream 强制在 Firefox 中下载,但在 Chrome 中根本不适合我。为了精确控制浏览器的行为,您确实需要使用 HTTP 标头,尤其是 Content-Disposition。见hanselman.com/blog/…