※ ChatGPTを利用し、要約された質問です(原文:iis+cgiでmultipart/form-data送信がうまくいかない)
IIS+CGIでmultipart/form-data送信がうまくいかない
このQ&Aのポイント
IIS+Perl/CGIに移行して、multipart/form-dataのファイルアップロードがうまくいかない問題が発生しています。
初めてのIIS+Perl/CGIでのWEBサーバ構築で、ファイルアップロードの部分で詰まっています。
IIS+Perl/CGI環境でのファイルアップロードのタイムアウト問題について、解決策を教えていただきたいです。
iis+cgiでmultipart/form-data送信がうまくいかない
これまでLinux+Perl/CGIで構築していたWEBサーバをIIS+Perl/CGIに移す必要が生じ、新規にIISによるWEBサーバを構築しました。
一気にコンテンツを移動してもハマるだけだと考え、まずは簡単なコードを記述しCGIが動作するかどうかテストしています。
POSTによるinput type=textのデータ表示まではうまく行きましたが、ファイルアップロードのところで詰まりました。
IIS(Windows)によるWEBサーバの構築は初めてで、何が問題なのかサッパリわかりません。
どなたか問題点あるいはどこをチェックすれば良いかご指摘いただけませんでしょうか。
●やった事
PerlにてPOSTを利用しmultipart/form-dataにてファイルをアップロードするシンプルなコードを書き、第一段階としてMIMEエンコードされたものをブラウザ上に表示するしようとしてみた。
コードは最下方の通り。
●症状
送信を実行してもアップロード中のまま(ウィンドウマークが動き続けている)で、IISに設定してある10分程のタイムアウト時間を過ぎて終了してしまう。
TXT、XLS、DOCなどファイル種を変えて試しても全く同じ症状。
●環境:Windows2000ServerSP4 IIS5.0 Perl5.8.8
*******アップロード画面******
<HTML>
<HEAD>
<TITILE>ファイルのアップロード</TITLE>
</HEAD>
<BODY>
<FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>
</BODY>
</HTML>
**********ここまで***********
*******CGI*******************
#!/perl/bin/perl
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
print "Content-type: text/html\n";
print "\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>test</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR=\"#ffffff\">\n";
print "$buffer";
print "</BODY>\n";
print "</HTML>\n";
exit;
********ここまで***********************
お礼
結論から言うと、お勧めいただいたcgi.pmを使う事にしました。 ただ、なぜうまく行かないか腑に落ちなかった事が、「IISのCONTENT_LENGTH はあてにならなかったと思います。」という一言により判りスッキリしました。ありがとうございます!! つまりは、送られてくるデータ量より大きい数字がCONTENT_LENGTHに入っているため、その分のデータが送られてくるまで待機状態になっていたという事だったんですね。試しにCONTENT_LENGTH部分を変数ではなく受け取るであろうデータ量よりも小さめの数字にしてみたところ、予想通り、受け取りデータの途中までをブラウザ上に表示できました。