【问题标题】:Save a file after a perl script runs on a web page在网页上运行 perl 脚本后保存文件
【发布时间】:2011-06-24 15:42:35
【问题描述】:

我有一个网页,将用于使用 perl 脚本创建 KML 文件。我希望用户将一些数据添加到将在我的 perl 脚本中使用的表单中。提交表单后,它将运行脚本,创建一个 kml 文件,然后提示用户保存文件。我不确定的唯一部分是如何让用户在脚本创建 KML 后保存文件。我是否有 perl 脚本提示下载或使用 HTML 页面上的某些内容提示下载。我不确定最好的方法。

【问题讨论】:

    标签: html perl download prompt


    【解决方案1】:

    如果您有告诉服务器构建 KML 的链接或表单,则只需正常生成 KML 并将其与一些额外的 HTTP 标头一起发送回浏览器。你想要的标题是:

    • Content-disposition 设置为 attachment;filename=whatever.kml 其中“whatever.kml”是您希望调用的文件。
    • Content-type 设置为 application/vnd.google-earth.kml+xml

    Content-disposition 应该告诉浏览器下载 KML 而不是尝试处理它。

    所以 Perl 脚本会提示浏览器提示下载。

    【讨论】:

    • (还有 google-earth 的相关性?)好吧,我明白了:这就是 KML。
    • 当你说用一些额外的 HTTP 标头发送回来时,你是什么意思?您是指实际文件的前几行还是将标题发送到实际页面。我什至不确定如何将文件发送到页面。我只是能够创建文件并将其存储在主机上,但这似乎效率不高。
    • @shinjuo:perl 脚本正在服务器上运行,并且正在从远程 HTML 页面执行,对吗?因此,您会以与发回 HTML 相同的方式发回 KML:打印它(可能)。如何将数据发送回浏览器以及如何设置 HTTP 标头的详细信息将取决于脚本的托管方式和使用的框架:old school CGI、FastCGI、mod_perl、Catalyst、Dancer...
    【解决方案2】:

    假设 kml 文件的内容在 $kml 中,那么您需要执行以下操作:

    use CGI;
    
    my $cgi = new CGI;
    
    print $cgi->header('-Content-disposition' => 'attachment;filename=kml.xml',
                       '-Content-type'        => 'application/vnd.google-earth.kml+xml');
    
    print $kml;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-07
      • 2016-10-31
      • 2013-10-16
      • 2018-03-31
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      相关资源
      最近更新 更多