ユーザーが選択したオプションに基づいて、DB からデータを取得し、ダウンロード可能な形式でユーザーに提供する必要がある Web サイトを再設計しています。データを文字列変数にフェッチしていますが、それをファイルに書き込んでからダウンロード コードを書きたくありません。文字列をクライアント側のファイルにダウンロードしたい。これにはperlを使用しています。
以前は、この perl-cgi コードを使用してファイルを読み込んでダウンロードしていました:
...
my $ID = "details.csv";
my @fileholder;
my $filesloc = "/html/details.csv";
open(DLFILE,'<',"$files_loc") || Error('open','file');
@fileholder = <DLFILE>;
close(DLFILE)
print "Content-Type:application/x-download\n";
print "Content-Disposition:attachment;filename=$ID\n\n";
print @fileholder;
これはdownloadscript.cgiとして保存されます。しかし今、これを.pmファイルで実行したいと考えており、文字列値を @fileholder に保存しています。私は試しました:
my $ID = "details.txt";
my @fileholder = qw(name age address);
print "Content-Type:text/plain\n";
print "Content-Disposition:attachment;filename=$ID\n\n";
print @fileholder;
.pm ファイルに含まれていますが、「名前を付けて保存」ダイアログを開く代わりに、画面に上記の行を印刷しています。どちらもperlなので、どこが間違っているのでしょうか?
EDIT:理由を知りました。以前にhtmlコンテンツタイプを開いてから、途中でこの「Content-Type:text/plain\n」を開こうとしているためです-これがブラウザが混乱する場所です。さて、以前の html コンテンツ タイプを閉じて、この新しいコンテンツ タイプを開いてダウンロードする方法を教えてください。