在网页上运行 perl 脚本后保存文件
Posted
技术标签:
【中文标题】在网页上运行 perl 脚本后保存文件【英文标题】:Save a file after a perl script runs on a web page 【发布时间】:2011-06-24 15:42:35 【问题描述】:我有一个网页,将用于使用 perl 脚本创建 KML 文件。我希望用户将一些数据添加到将在我的 perl 脚本中使用的表单中。提交表单后,它将运行脚本,创建一个 kml 文件,然后提示用户保存文件。我不确定的唯一部分是如何让用户在脚本创建 KML 后保存文件。我是否有 perl 脚本提示下载或使用 html 页面上的某些内容提示下载。我不确定最好的方法。
【问题讨论】:
【参考方案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;
【讨论】:
以上是关于在网页上运行 perl 脚本后保存文件的主要内容,如果未能解决你的问题,请参考以下文章