• 締切済み
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数574
  • ありがとう数17

みんなの回答

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

お答えありがとうございます。 実際にダウンロードするファイルはテキストファイル なので 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
  • 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
  • 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
  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • PHPとcgiの違い

    PHPとcgiの違い cgiで表示をする際に以下のような記述をしますが、 print"Content-type: text/plain; charset=utf-8\n\n"; print"こんにちは"; phpでは以下のような記述になるようです。 <?php print"こんにちは"; ?> cgiとPHPはほとんど同じと考えているのですが、 拡張子以外に、上記のように文法でも違いがあると考えていいのでしょうか? また、違いを注意すべき点はどういうところでしょうか?

    • ベストアンサー
    • CGI
  • cgi-lib.pl: Unknown・・・のエラーについて

    すみません。どなたかご存知の方教えてください。CGI初心者です。メールフォームのようなものを作っており、実験段階でつまづいています。ファイルをアップし、htmlページから送信すると 「cgi-lib.pl: Unknown Content-type: text/plain 」といった表示がされてしまいます。これはなんの原因が考えられるのでしょうか? 宜しくお願いいたします。

    • 締切済み
    • 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
  • 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
  • HTMLの中にCGIファイルリンク

    HTMLファイルの中にCGIファイルへのリンクを作りました。 リンクしてCGIファイルも実行してくれましたが、CGIファイルを実行した後、元のHTMLファイルへ戻したいです。 できますでしょうか? 教えてください! お願いします。 ************************** テストとして、下記のファイルを作りました。 HTMLとCGIのファイル ----------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> <TITLE>テスト</TITLE> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META content="IBM WebSphere Studio Homepage Builder Version 8.0.0.0 for Windows" name="GENERATOR"> <META http-equiv="Content-Style-Type" content="text/css"> </HEAD> <BODY text=#000000 bgColor=#bbeeee> <H2>テスト</H2> <HR> <FORM> <INPUT type="button" value="計算" onClick="location.href='http://localhost/cgi-bin/test.cgi'" target="_blank style="cursor:hand" title="テスト"> </FORM> <HR> </HTML> ---------------- #!/usr/bin/perl print "Content-Type: text/html\n\n"; `C:/windows/notepad.exe`; -------------

    • ベストアンサー
    • Perl

専門家に質問してみよう