<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を解析しているようです。
[上に]
[前に]
[次に]