• ベストアンサー

画像アップロード時の条件分岐

HTMLフォームでmultipart/form-dataによりPerlCGIのcgi-lib.plで値を取得するやり方で画像ファイルをWebサーバーのフォルダにアップロードします。 その際例えば600KBより大きければ、「画像が大きすぎます。600KB以下のデータに変更して再度実行してください」というHTMLメッセージを、600KB以下なら保存する、という条件分岐はどう書いたら良いでしょうか? またCGIで判断させるとしたら一旦データを取り込んでから判断するわけですから、ファイルアップロードが実行された後の処理という事で時間がかかりそうなので、ひょっとすると一般的にはJavascriptか何かでHTML側で判断して600KB超のデータなら、そのデータは送らないみたいなことをするのかも・・・もしそうならその記述も教えてください? ちなみにPerlもJavaScriptも初心者レベルですのでお手柔らかな解答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

JavaScript では無理なんで、CGI側で行うことになりますが、CGI.pm にしろ cgi-lib.pl を使うにしろそれ以前で CONTENT_LENGTH を読んでサイズを確認するのがよいかと。 if( $ENV{CONTENT_LENGTH} > 600*1024 ) { print("だめぽ"); exit(0) } とかで。 実際にはファイルサイズのみならず、それ以外のデータもくっついたサイズですが、ファイルサイズのほうが圧倒的に大きいのが普通なので、誤差ってことで無視するとか。

souta_n
質問者

お礼

返事おくれて申し訳ありませんでした。 教えてもらった条件分岐で"いけぽ"でした。 ありがとうございました。またよろしくお願いします。

その他の回答 (1)

noname#25358
noname#25358
回答No.1

 むーん(^_^;  それは cgi-lib.pl の仕様なので、お手柔らかにするのは無理かも(笑)  サイズオーバー時にはエラーメッセージを表示せずに実体データとして undef を設定するようにすればいいんですけど……。  これをやるには cgi-lib.pl を改造するしかないんですよ。  あるいは、CGI.pm という Perl モジュールを使用する方法もあるにはありますが……。

souta_n
質問者

お礼

難しいすか・・・ >これをやるには cgi-lib.pl を改造するしかないんですよ。 先程サイズオーバーになったので、cgi-lib.pl サイズを書き替えましたが、そんなちょっとした改造ではないのでしょうね・・・ >あるいは、CGI.pm という Perl モジュールを使用する方法もあるにはありますが……。 そういう手があるというのも調べて分かったんですが、cgi-lib.plを使った方法の方がなじみがあったもんで、そちらでやってみたんですが、やっぱりCGI.pmでのコーディングの方が良いのでしょうか。

関連するQ&A