【问题标题】:Allowing user to save contents of html list to text file允许用户将 html 列表的内容保存到文本文件
【发布时间】:2010-12-02 04:19:45
【问题描述】:

我正在开发一个基于用户输入生成输出列表的应用程序(ASP.NET、Webforms)。我想允许用户将所述列表的内容保存为文本文件,或者可能保存为其他文件类型,例如 .csv。解决这个问题的最佳方法是什么?可以用Javascript在客户端完成吗?

【问题讨论】:

    标签: c# javascript asp.net vb.net text-files


    【解决方案1】:

    我认为您需要使用 ActiveXJava AppletsSilverlight 来执行类似的操作。 JavaScript 无权访问本地文件系统。

    解决此问题的另一种方法是在服务器上(物理或动态)创建一个文件,并使其可供用户下载。这将使他进入保存文件对话框。

    要即时执行此操作,请创建一个空白页面(没有任何标记。甚至没有),设置Response.ContentType = 'text/plain' 并使用Response.Write() 将您的内容写入Page_Load

    【讨论】:

    • 有没有办法在服务器端完成,然后将生成的文件传递给客户端?
    【解决方案2】:

    您可以通过构造和打开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 来避免可能已经在客户端上的数据的往返。

    【讨论】:

    • 这是我对您的代码的修改:jsfiddle.net/radu/Y2e93。但问题是,我怎样才能让用户真正被提示将文件保存到磁盘?
    • 这主要与 URI 开头指定的媒体类型有关。如果浏览器认为它可以处理text/plain 的媒体类型,它会显示它,但对于text/csv 这样的媒体类型,浏览器会将其交给浏览器。 application/octet-stream 强制在 Firefox 中下载,但在 Chrome 中根本不适合我。为了精确控制浏览器的行为,您确实需要使用 HTTP 标头,尤其是 Content-Disposition。见hanselman.com/blog/…
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 2015-06-24
    • 2014-02-24
    • 1970-01-01
    相关资源
    最近更新 更多