我有以下隐藏的形式:
<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文档。
提交时,这将作用于以下简单的CGI脚本,用Perl编写:
#!/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文档。然后,最终用户可以将窗口保存到文件中。
相反,在提交表单时,我想要做的是让浏览器自动打开保存或另存为对话框,以便用户可以选择filename并保存文档,而不是在浏览器窗口中呈现SVG。
我如何使用JavaScript或对CGI脚本进行适当的更改? (我想保持父表单页面不变,即打开一个新标签或窗口,如果需要的话。)感谢您的建议。
再次澄清,我正在寻找一个解决方案,它会显示保存对话框。我不希望脚本确定文件名并将其保存在任意位置,无需任何用户干预。
答案 0 :(得分:5)
答案 1 :(得分:-1)
顺便说一下......你能说清楚这是为了什么吗?可以是替代解决方案......
内容 - 处置不会普遍有用,您最终需要的是从虚拟URL提供此文件,比如说
/generated-images/generatedname.svg
然后你在HTML中说
<form ... action="/generated-images/generatedname.svg" ...>
和你的脚本类似于这些Apache指令(在config或.htaccess中),我不保证这可行,但我认为它接近真实(你还需要正确的路径和设置来运行Apache的CGI )
<Directory /.../generated-images/>
Action mirror-svg-data /path/somescript.cgi
AddHandler mirror-svg-data .svg
</Directory>
或者你也可以将你的URL重写为脚本,但我不确定内部重定向如何与POST一起使用,你可以试试这个:
RewriteRule /generated-images/.*\.svg /somepath/script.cgi [L]
祝你好运!