- ベストアンサー
画像アップロード時の条件分岐
HTMLフォームでmultipart/form-dataによりPerlCGIのcgi-lib.plで値を取得するやり方で画像ファイルをWebサーバーのフォルダにアップロードします。 その際例えば600KBより大きければ、「画像が大きすぎます。600KB以下のデータに変更して再度実行してください」というHTMLメッセージを、600KB以下なら保存する、という条件分岐はどう書いたら良いでしょうか? またCGIで判断させるとしたら一旦データを取り込んでから判断するわけですから、ファイルアップロードが実行された後の処理という事で時間がかかりそうなので、ひょっとすると一般的にはJavascriptか何かでHTML側で判断して600KB超のデータなら、そのデータは送らないみたいなことをするのかも・・・もしそうならその記述も教えてください? ちなみにPerlもJavaScriptも初心者レベルですのでお手柔らかな解答お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
JavaScript では無理なんで、CGI側で行うことになりますが、CGI.pm にしろ cgi-lib.pl を使うにしろそれ以前で CONTENT_LENGTH を読んでサイズを確認するのがよいかと。 if( $ENV{CONTENT_LENGTH} > 600*1024 ) { print("だめぽ"); exit(0) } とかで。 実際にはファイルサイズのみならず、それ以外のデータもくっついたサイズですが、ファイルサイズのほうが圧倒的に大きいのが普通なので、誤差ってことで無視するとか。
その他の回答 (1)
むーん(^_^; それは cgi-lib.pl の仕様なので、お手柔らかにするのは無理かも(笑) サイズオーバー時にはエラーメッセージを表示せずに実体データとして undef を設定するようにすればいいんですけど……。 これをやるには cgi-lib.pl を改造するしかないんですよ。 あるいは、CGI.pm という Perl モジュールを使用する方法もあるにはありますが……。
お礼
難しいすか・・・ >これをやるには cgi-lib.pl を改造するしかないんですよ。 先程サイズオーバーになったので、cgi-lib.pl サイズを書き替えましたが、そんなちょっとした改造ではないのでしょうね・・・ >あるいは、CGI.pm という Perl モジュールを使用する方法もあるにはありますが……。 そういう手があるというのも調べて分かったんですが、cgi-lib.plを使った方法の方がなじみがあったもんで、そちらでやってみたんですが、やっぱりCGI.pmでのコーディングの方が良いのでしょうか。
お礼
返事おくれて申し訳ありませんでした。 教えてもらった条件分岐で"いけぽ"でした。 ありがとうございました。またよろしくお願いします。