【问题标题】:How to trigger the browser to save file via CGI?如何触发浏览器通过 CGI 保存文件?
【发布时间】: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 文档。然后最终用户可以将窗口保存到文件中。

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

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

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

【问题讨论】:

标签: html perl browser user-interface cgi


【解决方案1】:

【讨论】:

  • 这个问题是文件名是由 CGI 设置的,而不是由最终用户设置的。这不会弹出保存文件对话框。这有助于澄清问题吗?
  • 浏览器如何处理它取决于浏览器。 inline 表示“尝试渲染它”。 attachment 表示“尝试保存它”。浏览器可能会使用文件名作为默认文件名并显示另存为对话框,或者他们可能只是将其保存到默认目录,您不能强制其中一个。
  • 昆汀说得对。该脚本无法将内容保存到用户的计算机。服务器上的 CGI 和客户端机器上的 JS 都不能做到这一点。在大多数浏览器中,用户可以更改保存方式的设置。在当前的 Firefox 中,此设置位于设置对话框的最左侧选项卡中。我手头只有一个德国FF。那里叫Extras &gt;&gt; Einstellungen &gt;&gt; Allgemein &gt;&gt; Downloads &gt;&gt; Jedes mal nachfragen, wo eine Datei gespeichert werden soll
  • 无赖!我希望我有办法解决这个问题。
【解决方案2】:

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

Content-Disposition 不会有普遍的帮助,你最终需要的是从虚拟 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]

祝你好运!

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 2013-02-24
    • 2014-01-28
    • 1970-01-01
    • 2011-01-29
    • 2018-11-26
    • 2012-01-28
    • 2019-04-18
    • 1970-01-01
    相关资源
    最近更新 更多