0

我有以下隐藏形式:

<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 文档。然后,最终用户可以将窗口保存到文件中。

相反,在提交表单时,我想做的是让浏览器自动打开“保存”或“另存为”对话框,以便用户可以选择文件名并保存文档,而不是在浏览器窗口中呈现 SVG。

我如何使用 JavaScript 或对 CGI 脚本进行适当的更改来做到这一点?(如果需要,我想保持父表单页面不变,即打开一个新选项卡或窗口。)感谢您的建议。

再次澄清一下,我正在寻找一种可以打开“保存”对话框的解决方案。我不希望脚本在没有任何用户干预的情况下确定文件名并将其随机保存在某处。

4

2 回答 2

5

改为使用Content-Disposition: attachment; filename="example.svg"

于 2012-06-06T10:27:01.263 回答
-1

顺便说一句......你能澄清一下这是为了什么吗?可能是替代解决方案...

Content-Disposition 不会有普遍的帮助,你最终需要的是从虚拟 URL 提供这个文件,比如说

/生成图像/生成名称.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]

祝你好运!

于 2012-06-06T13:03:26.733 回答