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 に答える