アプリ版:「スタンプのみでお礼する」機能のリリースについて

何度も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" のオプションをつけて
配列変数にテキストエリアの内容を入れるにはどうすればいいのでしょうか。
テキストエリアを取り除くとファイルのアップロードはできます。
ただ、ファイルと入力したテキストを同時に処理することができないんです。

A 回答 (1件)

うちではできましたよ。



ちなみに「配列変数」ってのが、、、。
どこで配列に値を格納しているのでしょうか?
そのあたりで妙な事になっているのですかね。。。?

-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を使った方法で取得したかったわけです。。。

補足日時:2002/07/02 19:10
    • good
    • 0
この回答へのお礼

回答ありがとうございます
それと、配列変数ではなく連想配列でした
やってみたらご報告します。

お礼日時:2002/06/28 12:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!