<FORM ENCTYPE="multipart/form-data" …>でその後の<INPUT>を認識しない?

[上に] [前に] [次に]
茶しぶ男 2000/03/03(金) 19:19:23
ファイルをアップロードするスクリプトを作っています。

HTMLページ(perlで生成)内から
<FORM ENCTYPE="multipart/form-data" METHOD=POST ACTION="hogehoge.cgi">
<INPUT TYPE=HIDDEN NAME="ACTION" VALUE="regist">
 :
</FORM>

としているのですが、なぜかスクリプト内でNAME=ACTIONの値が「regist」だということを認識してくれません。

ENCTYPE="multipart/form-data" を削ると認識してくれるのですが、ファイル転送させないといけないので、はずすわけにもいきません。

いったい、どうしてこうなってしまうのでしょうか?
心当たりのある方、ご伝授下さいませ。

H&A 2000/03/03(金) 19:59:53
ENCTYPE を "multipart/form-data" と指定して POST メソッドを用いた場合、サーバ側に渡されるパラメータの形式が大きく変わってしまいます。
具体的には、CGI の環境変数 CONTENT_TYPE に "multipart/form-data; boundary=---------------------------7d0332938c0382" のような値が設定され、標準入力を通して以下のようなデータが渡されます。

--------------------- ここから ---------------------------
-----------------------------7d0332938c0382
Content-Disposition: form-data; name="upl"; filename="c:\test.txt"
Content-Type: application/octet-stream

(c:\test.txt の内容)
-----------------------------7d0332938c0382
Content-Disposition: form-data; name="ACTION"

regist
-----------------------------7d0332938c0382--
--------------------- ここまで ---------------------------

上記は、フォーム中の INPUT タグとして
<INPUT TYPE="file" NAME="upl">
<INPUT TYPE="hidden" NAME="ACTION" VALUE="regist">
があるものとしています。

ENCTYPE="multipart/form-data" で渡されたパラメータを受け取ることのできるライブラリは(たぶん)いっぱいあると思うので、そのようなライブラリを探されてみてはどうでしょうか。

茶しぶ男 2000/03/03(金) 20:11:53
[[解決]]
ありがとうございます。
http://www.mahoroba.ne.jp/~yuugeki/
においてある、decoder.plで
&Decode;
をコールすることにより,解決できました。
ライブラリ内で、ENCTYPE="multipart/form-data" か否かを判定して、INPUTを解析しているようです。

[上に] [前に] [次に]