- 締切済み
cgi.pm を使用してファイルUP時にtextエリア等の情報もcgiに引き渡す
何度もPerlのところで質問していますが・・・今回は ファイルのアップロードをするときに少々もんだいが出てきてしまうことについてです。<input type="file"... を使います 以下の二つのファイルで構成しています(一部分だけ) ---form.html--- <form action="upload.cgi" method="POST" ENCTYPE="multipart/form-data"> <textarea name="input_textarea" rows="20" cols="70"></textarea> <input type="file" name="File" size=32> <input type-"submit" value="ok"> ---upload.cgi--- [formからの情報を配列変数に代入するスクリプト・・・] use CGI; $query = new CGI; $filename = $query->param('File'); # ファイル名の取得 $type = $query->uploadInfo($filename)->{'Content-Type'}; 同じファイル名が無いことを確認して、保存 という処理を行っています。upload.cgiの中身がとぼしくて申し訳ありません。 かなり省略してます。 さて、、問題となるのは ENCTYPE="multipart/form-data" とすると 配列変数にFORMからの情報がうまく入ってくれないということです、 かといってENCTYPE="multipart/form-data"を外すと CGI.pm を使った ファイルのアップロードができなくなってしまいます。 ENCTYPE="multipart/form-data" のオプションをつけて 配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。 テキストエリアを取り除くとファイルのアップロードはできます。 ただ、ファイルと入力したテキストを同時に処理することができないんです。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- sun_supinel
- ベストアンサー率35% (7/20)
うちではできましたよ。 ちなみに「配列変数」ってのが、、、。 どこで配列に値を格納しているのでしょうか? そのあたりで妙な事になっているのですかね。。。? -wオプションつけて変数名に誤りがないか調べてみるのもいいかもしれません。 以下かなり適当に作ってしまったサンプル。 でも動作確認済み。 ------------------------------ <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <FORM ENCTYPE="multipart/form-data" METHOD="post" ACTION="upload.pl"> <TEXTAREA NAME="textarea"></TEXTAREA> file : <INPUT TYPE="file" NAME="file"> <INPUT TYPE="submit" NAME="submit"> </FORM> </BODY> </HTML> ------------------------------ ------------------------------ #!/usr/bin/perl use CGI; my $cgi = new CGI; my $filename = $cgi->param('file'); my $textarea = $cgi->param('textarea'); my $type = $cgi->uploadInfo($filename)->{'Content-Type'}; open (OUTFILE,">>/tmp/feedback"); while ($bytesread=read($filename,$buffer,1024)) { print OUTFILE $buffer; } print "Content-type: text/html\n\n"; print <<"_HERE_"; <html> <body> たぶん処理は正常に終了しています。<BR> textarea : $textarea<BR> type : $type </body> </html> _HERE_ ------------------------------
お礼
回答ありがとうございます それと、配列変数ではなく連想配列でした やってみたらご報告します。
補足
なんとかできました、ありがとうございました、、 テキストエリアの情報は$textarea = $cgi->param('textarea'); で取得するのではなく、一般的なcgi-lib.plを使った方法で取得したかったわけです。。。