- ベストアンサー
ファイルアップローダーについて
Perlを使用してCGIのアップローダーを作成しています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1177414 の続きなのですが、Web上にあるコードを持ってきて、自分なりに変更してみました。 上記のものだと、ラジオボタンがないので、そこを追加して、さらに拡張子に何がくるかわからないので下記のようにして拡張子を求めました。 ################## # 拡張子を求める # ################## $filename = $in{'upfile'}; $substrings = "."; $position = rindex $filename, $substrings; $file_type = substr($filename, $position); $fnme = $fnme . $file_type; # 受信データを書き込む open OUT,">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; $mes = '書き込みが完了しました。'; 無事拡張子も出て、「sample.***」という感じでアップロードできたのですが、アップロードできたこのファイルを開こうとすると、 gifは「種類を特定できません」、bmpは「このファイルは読み取れません。このビットマップファイルは無効であるか、または現在サポートされていない形式です」 と出てしまいました。 こんな風に拡張子を取得したのではダメなのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- Ethersky
- ベストアンサー率71% (168/235)
回答No.1
お礼
回答ありがとうございます。 金曜は焦っていたんだなぁと自分でも文章を見て思います(笑 以下のようにしてみました。 htmlの文章 <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>アップロード</TITLE> </HEAD> <BODY> <FORM method="POST" action="2.cgi" enctype="multipart/form-data"> <INPUT TYPE=RADIO NAME="folder" VALUE="a">a <BR> <INPUT size="40" type="file" name="upfile"> <INPUT type="submit" value="送信する"> </FORM> </BODY> </HTML> cgiの方で@inをprintで見てみると Content-Disposition: form-data; name="folder" Content-Disposition: form-data; name="upfile"; filename="*****\mark.gif" Content-Type: image/gif と出てきました。 こうするとラジオボタンの中身は入ってこないですよね? ラジオボタンのデータを取得するにはどうしたらいいのでしょうか? 通常のcgiだと上記のようにすれば取得できると思うのですが…。 またcgiの中の拡張子を取得する箇所で if ($tmp =~ /(.*)Content-type:(.*)/i){ と if ($2 =~ /image\/jpeg/i) { $ext = '.jpg'; } という表記がありますが、意味はなんとなくわかりますが、コードの意味がイマイチわかりません。
補足
無理やりな方法ですが、自分なりに考えて長々とコードを書いて、無事完成させることができました! 人がみたら変なコードだと思いますが、自分で考えたコードなのでちょっとうれしいです(^^) 教えていただいてありがとうございました。