CGI-BBS > CGI > Perl > Mac IEで指定したファイル名をダウンロードさせたい


カレッヂ
カレッヂ


質問者 まさひろ  投稿日 1/22(水) 17:52:17
はじめまして、
Perl で書いたCGIでファイルダウンロードを行うプログラムを書いています。
その際、ダウンロード時のファイル名をサーバ側で指定したファイル名にする
方法で悩んでいます。

Windows IE 5.x/6.x だと、CGI側でダウンロードファイル名を以下のように
指定することで、ファイル名が正しく入り、ダウンロード可能です。
    print (qq(Content-Type: application/octet-stream\n));
    print (qq(Content-Disposition: filename="$filename_sjis"\n\n));
(*) $filename_sjis は、SJIS でエンコードされたファイル名

Windows Netscape 6.x/7.x だと、ダウンロードファイルを作成するCGIを呼び
出す際、
    <a href="download.cgi/FILENAME">
のように書いてあげると、英数字のみで記述されているファイル名は正しく
ダウンロード可能です。
しかしながら日本を含むファイル名の場合、日本語ファイル名は空白になって
しまいます。
これは、Netscape の不具合なのかな・・・とあきらめました。

さて、Mac IE の場合、Windows IE と同じように
    print (qq(Content-Type: application/octet-stream\n));
    print (qq(Content-Disposition: filename="$filename_sjis"\n\n));
だけだと、CGI名(ex. download.cgi) でダウンロードマネージャはダウンロー
ドしてしまいます。
そこで、Windows Netscape と同様に
    <a href="download.cgi/FILENAME">
とした場合、英数字のみで記述されているファイル名は正しくダウンロード
できました。
ところが、日本語を含むファイル名としてダウンロードした場合、ファイル名が
化けてしまいます。

長々と書きましたが、ここからが質問です。

・CGIでファイルダウンロードする際、ファイル名を日本語にしたいのですが
  1) Mac IE の場合
  2) Windows Nescape の場合
  どなたか方法をご存知ないでしょうか?

よろしくお願いいたします。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:MacX
エディタ:ViVi
FTPソフト:WebDAVで行っているので使っていない
サーバ移転:していない
改造:していない
CGI習熟度:(未選択)

回答者 やまだ  [削除]  投稿日 2/3(月) 06:41:48
そもそも、Content-Dispositionでのfilenameは、日本語のファイル名はダメなはず。
RFC2183では、そのようです。

http://www.studyinghttp.net/rfc_ja/rfc2183_ja.html
質問者 まさひろ  [削除]  投稿日 2/4(火) 13:28:10
まさひろです。

ご回答ありがとうございました。
私もRFC2183 を読んでみましたが、非ASCII文字を使う場合はエンコードしろ、
とは書いてありますが、日本語名はダメとは書いてないと思います。

いかがでしょうか?
回答者 やまだ  [削除]  投稿日 2/5(水) 01:31:23
以下の文は、可能と言っているのかな?

現在 [RFC 2045] の文法は、パラメータ値 (すなわち Content-Dispositionファイル名) を US-ASCII に限定している。
我々はファイル名に任意の文字セットを許す事を非常に望んでいる事は認めるが、それに必要なメカニズムを定義する
ことはこの文書の範囲を超える。我々は基本 [RFC 1521] `value'仕様がいつか非 ASCII 文字を使う事ができるように
修正される事を期待しており、その時は同じメカニズムが Content-Disposition ファイル名パラメータにて使われる
べきである。


それから、ここでのエンコードとは、SJIS,EUCとかでなく、7bit,8bit,quoted-printable,base64とかのこと
ですよね。


ついでに、
Content-Disposition: [inline|attachment];
のどちらかにしておいたほうがいいんじゃないかな。
質問者 まさひろ  [削除]  投稿日 2/6(木) 15:24:21
やまださん、ご回答ありがとうございます。

改めて読み返してみると、確かにおっしゃるとおり現時点では、US-ASCII文字
以外はRFC的にはダメのようです。
また、エンコードについても、おっしゃるとおりだと思います。

ご指摘ありがとうございます。m(._.)m

ただ、実際にテストしてみるとお分かりになるかと思いますが、私が最初に書
いたとおりの挙動を示します。
私が皆様にお伺いしたかったのは、実現されたことのある方がどんな風に実装
したか、を教えていただきたかったのであり、RFCやW3C的には…というお話は
私にとっては、あまり興味のない話なので…申し訳ありません。

ご理解いただければ幸いです。

返信(回答)する

 


Web裏技