【发布时间】:2012-06-10 08:38:10
【问题描述】:
我有以下隐藏表格:
<form id='export_svg_container_single_form'
action='exportSVG.pl'
method='post'
target='_blank'
style='display:none;'>
<input type='text'
id='export_svg_container_single_form_data'
name='export_svg_data'
style=';' />
</form>
export_svg_data 字段值会在表单提交之前使用 SVG 文档填充。
提交后,这将作用于以下用 Perl 编写的简单 CGI 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Pretty qw/:standard/;
my $val = param('export_svg_data');
print "Content-Type:image/svg+xml\n";
print "Content-Disposition: inline\n";
print "Content-Description: File to download\n\n";
print $val;
提交后,隐藏的表单还会打开一个新选项卡并显示(在本例中)一个 SVG 文档。然后最终用户可以将窗口保存到文件中。
相反,在提交表单时,我想做的是让浏览器自动打开 Save 或 Save As 对话框,以便用户可以选择文件名并保存文档,而不是在浏览器窗口中呈现 SVG。
如何使用 JavaScript 或对 CGI 脚本进行适当的更改来做到这一点? (如果需要,我想保持父表单页面不变,即打开一个新选项卡或窗口。)感谢您的建议。
为了再次澄清,我正在寻找一种能够打开 保存 对话框的解决方案。我不希望脚本在没有任何用户干预的情况下确定文件名并将其随机保存在某处。
【问题讨论】:
-
顺便说一句,不要打印原始标题行,而是使用
CGI.pm的header。例如。print header(-type => 'image/svg+xml', -attachment => $filename)。另见blog.nu42.com/2012/05/file-download-cgi-script-in-perl.html
标签: html perl browser user-interface cgi