• 締切済み

CGIでファイルのダウンロードをさせたい

ホームページでファイルのダウンロードをさせたいの ですが、セキュリティの関係もあって元ネタのファイル はURLで指定できるところにはありません。 そこで、C言語でCGIを作成し、Content-Type: text/plain\n\n などとし、CGI側でファイルをOPEN して吐き出させたところ、ブラウザー(IE5)では ダウンロード画面が表示されず。CGIが出力した内容が そのまま表示されてしまいます。CGIでの処理が足りない と思われますが、どうしたらCGIからブラウザーへダウンロードの指示を出すことができるのか教えて下さい。

  • CGI
  • 回答数1
  • ありがとう数17

みんなの回答

  • Dick
  • ベストアンサー率26% (9/34)
回答No.1

Content-Type: text/plain だと,ブラウザはそれを表示してしまいます.ファイルの内容に合わせた,適切な MIME タイプを指定すればいいはずです.

kenchan
質問者

お礼

その後の調べでIEはCGIが出力するContent-Typeは無視 することが分かりました。NSは application/octet-streamとかしてあげればOK。IEの場合はファイルタイプの設定を変更しないとダウンロードしてくれません。 と、ここまで分かってたまたまWindows2000で動かそう としたところファイルタイプの設定画面からMIMEの 設定がなくなっており、REGISTORYの設定を直接変更 しましたが、やはりダウンロードできませんでした。 なんか中途半端になってしまいましたが、今回はありがとうございました。

kenchan
質問者

補足

お答えありがとうございます。 実際にダウンロードするファイルはテキストファイル なので text/plainにしたのですが、となると この場合のMIMEタイプはなにがよいのでしょうか。

関連するQ&A

  • CGI経由でのPDFファイルをダウンロード

    こんにちは。 CGIの初心者です。 今CGI経由でのPDFファイルをダウンロードするというプログラムを作っています。 ただ、ダウンロードしたファイルは開けなく、エラーが出ます。ファイルを確認すると0バイトです。原因はよく分からないので、誰かが教えてください。ありがとうございます。 コードです: $filename = './data/sheet.pdf'; $source = $filename ; print qq|Content-type: text/plain\n|; print qq|Content-Disposition: attachment; filename="$filename"\n|; print qq|\n|; #-- ファイルを読み込んで出力 open(FILE,"$source"); binmode FILE; binmode STDOUT; while(read(FILE, $value, 4096)){ print $value; } close FILE;

    • 締切済み
    • CGI
  • CGI

    javaで書いたプログラムをCGIで使いたいのですが。 Cの場合、CGIで使うために、 #include <stdio.h> main(){ printf("Content-type: text/plain\n\n"); printf("Hello C world!\n"); } というように、「Content-type: text/plain」と加えてッ改行を2回しています。 この、「~.c」のファイルを、コンパイル&実行するとき、[~.cgi」というファイル名に出力するように、 javaのプログラム class HelloWorld{ static public void main(String args[]){ System.out.println("Hello World!"); } } には何を加えて、コンパイルの際、どうすれば、「~.cgi」になるのか教えてください。 コンパイらーはj2sdkです。

    • ベストアンサー
    • Java
  • CSVファイルのダウンロードについて

    現在開発しているシステムでCSVファイルをダウンロードしたいのですがうまくいきません。どなたか問題の解決できる方お願いします。 現在、CGIでCSVファイルを作成しておきそれをファイルのリンクからダウンロードさせようとしています。 そこで問題になっているのがIEのバージョンが6以前なら普通にダウンロードが出来るのですが、バージョン6だとEXSELがブラウザ内で立ち上がります。 これの回避方法(まずダウンロードをしたいです。)はありませんか? 現在ファイルのヘッダーはこのようにしています。 print "Content-type: application/octet-stream\n" ."Content-Disposition: attachment; filename=aaa.csv\n\n" あと、このCGIプログラムをネスケ、mozillaで開くとソースがブラウザに表示されてしまいます。IEでは問題なく表示されるのにネスケとmozillaはどうしてこんなことが起きるのでしょうか? 少しわかりずらい文章になってしまって申し訳ありません。 どなたかお力を貸してください。お願いします。

    • 締切済み
    • CGI
  • CGIへ飛ばずに処理だけさせたい

    HTMLのフォームからsubmitしてcgiにアクセスする。 cgiでHTMLからのポストとゲットを読み込んで ログファイルに書き込む。 というCGIを作ったんだけど、 print "Content-type: text/html\n\n"; を書かないと、submitしてからcgiの処理が 止まらないみたいでした。 print "Content-type: text/html\n\n"; を書くと、処理は正常になるけど、cgiファイルに ジャンプしてしまいます。 openで書き込みをする場合、cgiに飛ばずに 処理する方法を教えてください。

    • ベストアンサー
    • CGI
  • 「***.cgi」というファイルをダウンロードしようとする。

    こんにちは。 IEであるページのトップページに行くと 必ず「log.cgi」と「today.cgi」の2つのファイルをダウンロードしようとします。(カウンター表示のデータだとおもいます。) 今はキャンセルしていますが、トップに戻るたびに出るので困っています。 他の場所にあるブラウザ(同一バージョンのIE)では、この様なこともなく正常です。 このダウンロードの動作を止める方法を教えた下さい。

  • CGIでファイルが読み込めない

    CGI初心者です。 (osはlinuxです。) #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; このスクリプトで、/home/data.txt(フルパスです)に書かれているデータを1行だけをブラウザで表示させたいのですが、表示できません。 どこがおかしいのか教えてください。 ちなみにdata.txtには実際に「abc」という文字1行しか入れていません。

    • 締切済み
    • CGI
  • CGIのパーミッションについて??

    「10日で覚えるPerlCGI」という本を購入して 「ActivePerl」とWindows用の「Apache」をインストールしました。 使用しているOSはVistaです。ブラウザーはIEの(多分8か9)と GoogleCromeを使用しています。 Apacheのインデックス画面と他のHTML画面は 表示されるのですが、CGIを使用した画面が表示されません。 CGIの画面を表示させようとすると下記のメッセージが表示されます。 You don't have permission to access /tendays/1-1.cgi on this server 権限が関係しているのかと思い、 ドキュメントルートとCGIの置いてあるフォルダと、 Perlの置いてある場所の権限を全てフルコンにしました。 しかしながら、このメッセージは変化ありません。 下記がCGIの中身です。 -------------------------------- #! a:/perl/bin/perl print "Content-type: text/plain\n\n"; print "Hello Perl !"; -------------------------------- どのようにしたら、このCGIファイルをブラウザで表示できるようになるでしょうか。 どうぞ、よろしくお願いしいます。

  • CGIで作ったHTMLの文字化けについて

    CGIのヘッダを "Content-type: text/html\n\n" として、HTMLをブラウザに出力するcgiを作っているのですが、 「表示」という文字が「侮ヲ」と文字化けしてしまいます。 HTMLの<head></head>内には print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift-jis\">"; と記述して日本語を指定しています。 文字化けの原因がまったくわかりません。 心当たりありませんでしょうか?

    • ベストアンサー
    • Perl
  • CGIのファイルの種類について

    初めてCGIを勉強しています。テキストを見ながら自分のPCにApacheをインストールし、Perlもインストールしました。 #!c:/perl/bin/perl print "Content-type: text/plain\n\n"; print "Good Morning !"; とメモ帳を起動して文字を入力し、保存の時に"test.cgi"とフォルダーに保存しました。 テキストには起動するとWebブラウザに文字が出ると出てますが、私の場合、ブラウザの他にメモ帳が開いてそっちに文字が出ます。よくわからないのにもかかわらず、CGI拡張子の変更のところで、ファイルの種類を削除したり、新規で作ったり何度もやってて、開かないのでメモ帳で開くように変えたりしていたのが原因ではないかと思っています。身近で詳しい人がいないので本当に困っています。 時間がなくてテキストで勉強を始めたのですが、ちゃんと学校に行って勉強すればよかったのでしょうか。後悔と行き詰まりで頭が痛くなりました…。 どなたか、もしお分かりでしたら、教えてください。

    • ベストアンサー
    • CGI
  • HTMLのファイルにCGI処理結果を表示する

    まずトップページはhtmlで作ります。 そのトップページにいつも変化する所があるのでcgiで処理を施したものをhtmlに貼り付けたいと思っています。 その場合に例えば画像を出力させる場合は <IMG src="cgi-local/top.cgi"> で指定し、 #!/usr/local/bin/perl print "Content-type: image/jpeg\n\n"; open FH,"<../image.jpg"; binmode FH; binmode STDOUT; print while(<FH>); close FH; をやれば動かせますが、これを画像ではなくhtmlを表示させるためには print "Content-type: image/jpeg\n\n"; を print "Content-type: text/html\n\n"; に変更する事により可能だと思いやってみたのですが、うまく出力できませんでした。 cgi処理をうまくhtmlに貼り付ける方法があるのでしょうか。どうか教えて頂けないでしょうか?お願します。(涙)

    • ベストアンサー
    • CGI