• ベストアンサー

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

landgraveの回答

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

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

souta_n
質問者

お礼

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

関連するQ&A

  • アップロードされてきた画像ファイル

    フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。 <FORM action="xxxx.cgi" method="post" enctype="multipart/form-data"> <INPUT type="file" name="gazo"> <INPUT type="submit"> </FORM> とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、 受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか? cgi-lib.plを読み込んで、$in{'gazo'} というような形で画像ファイルのデータを受け取ればよいのでしょうか?

    • ベストアンサー
    • CGI
  • フォームからアップロードされた画像ファイルの処理

    フォームからアップロードされてきた画像ファイルを、適当なファイル名を付けてJPGあるいはGIFの拡張子で保存し、HTMLファイルで保存した画像を一覧表示させようというCGIスクリプトを作りたいと考えています。 質問1 <FORM action="xxxx.cgi" method="post" enctype="multipart/form-data"> <INPUT type="file" name="gazo"> <INPUT type="submit"> </FORM> とこんな具合のフォームから画像ファイル(JPGやGIF)をアップロードした時、 受け手のxxxx.cgiでは、この画像ファイルのデータをどのように受けたらよいのでしょうか? read(STDIN,$_,$ENV{'CONTENT_LENGTH'});としたり、 あるいは cgi-lib.plを読み込んで、$in{'gazo'} というような形で画像ファイルのデータを受け取ればよいのでしょうか? 質問2 画像ファイルを受け取ったとして、フォームから送られてきた画像ファイルがJPGなのかGIFなのかを判別することは可能でしょうか? 可能ならば、判別するためのスクリプトはどんなものが考えられるでしょうか? (フォームから送られてくる画像ファイルのデータの何をチェックすれば、JPGかGIFかを判別できるのでしょうか?) もしご回答頂ける方がおられればご教授ください。よろしくお願いします。 なお、「既存のスクリプトを利用しなさい」というような回答やアドバイスならば不要でございます。

    • ベストアンサー
    • Perl
  • バイナリファイルのアップロード

    とあるサイトのマルチパートリクエストの使用事例をそのまま使って153KB程度のGIFファイルをアップロード実験してみましたら、処理後ブラウザで「cgi-lib.pl: Request to receive too much data: 153345 bytes 」と表示されアップロードされません。表示の意味と、どうすればアップロードできるかを教えてください。 ● サンプルHTML <html> <head><title>ファイルアップロード</title></head> <body> <form method="POST" action="upload.cgi" enctype="multipart/form-data"> <input type="file" name="upload"> <input type="submit" value="送信"> </form> </body></html> ● サンプルCGI require "cgi-lib.pl"; &ReadParse; $upload = $in{"upload"}; # ファイル内容を取得 $name = $incfn{"upload"}; # ファイル名を取得 $name =~ s/\\/\//g; # パス区切り文字を/に変換 $name = substr($name,rindex($name,"/")+1); # ファイル名のみを取得 if($upload ne "" && $name ne ""){ open(FILE,">$name"); binmode(FILE); print FILE $upload; close(FILE); }

    • ベストアンサー
    • Perl
  • ファイルのアップロードとログ

    今日はいつもお世話になっています。 ファイルをアップロードをする際についでにログに名前やアドレス、ファイル名をログに 保存したいなと思っているのですが、なかなかうまくいきません・・・ ファイルをアップロードすることは出来たのですがほかの内容をうまくCGIに渡せなくって 困っています。 どうか宜しくお願いいたします。 use lib './lib'; use CGI_Lite; require 'lib/util.pl'; require 'pl/cgi-lib.pl'; require 'pl/jcode.pl'; $Title = 'ファイルのアップロード サンプル'; $Temp = 'tmp'; $Platform = 'Unix'; $BUFSZ = 2048; $CharSet = 'Shift_JIS'; $upload = new CGI_Lite; $upload->set_directory($Temp) or exitError(" $Temp がオープンできません。"); $upload->set_platform($Platform); $upload->set_buffer_size ($BUFSZ); $filename = $upload->filter_filename(\&convName); $upload->close_all_files; %data = $upload->parse_form_data; if ($upload->is_error()) { exitError($upload->get_error_message());} &ReadParse( *answer ); $num = $answer{'num'} $nam = $answer{'nam'}; $mai = $answer{'mai'}; $file = $answer{'file'}; print <<"EOL"; <HTML><HEAD><TITLE></TITLE></HEAD> <BODY> 整理番号  :$num<br> 名前    :$nam<br> アドレス  :$mai<br> 添付ファイル:$file<br> </BODY> </HTML> EOL exit(0);

    • ベストアンサー
    • CGI
  • ReadParseを使ってのバイナリファイルのアップロード

    ファイルをアップロードするCGIを作ろうと思い、以下のように書いてみました。そうしたところテキストファイルのアップロードには成功しましたが、バイナリファイルだとアップロード出来ても開けなかったり、画像が崩れてしまったりしてしまいました。 何故バイナリファイルだとアップロードが失敗してしまうのかわかりません。どこを直せば良いのでしょうか。 よろしくお願いします。 ----------------------------------------------- フォーム <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="xxx.pl"> <INPUT TYPE="file" NAME="file"> <INPUT TYPE="submit" VALUE="アップロード"> </FORM> ------------------------------------------------ xxx.pl &ReadParse(*in, *f_name, *f_type); $f_name{'file'}=~/([^\\\/]+)$/; $filename = $1; open(IN, ">$filename"); print IN $in{'file'}; close(IN);

    • ベストアンサー
    • CGI
  • 画像アップ時のエラー

    <INPUT size="40" type="file" name="upfile"> を使って画像をアップしたのですが 「cgi-lib.pl: Request to receive too much data: 280979 bytes」 のエラーが出ます、ファイルによってはエラー表示されません、ファイルサイズが大きいのでしょうか?だとしたらcgi-lib.plの限界? 回避方法ご存知でしたらお教え下さい、宜しくお願い致します。

    • ベストアンサー
    • CGI
  • JavaScriptだけで画像アップロードし、表示

    JavaScriptだけで画像アップロードし(実際に受け取り)、画面に表示させたいのですが、可能でしょうか? ※JavaScriptしか使えないレンタルサーバでの利用を想定しています 下記を試してみたのですが、うまくいきませんでした ▽【HTML5】File APIを使って、投稿された画像を即時表示する方法【小ネタ】 : アシアルブログ   http://blog.asial.co.jp/1079 ※画像は表示されるのですが、画像ファイルはアップロードされていない(もしくは受け取ることが出来ない) ■質問1 ・画像ファイルパスが、<img src="data:image/jpeg;base64,/9j/4AAQS になるのですが、これは、tmpみたいな場所にアップロードされている、ということなのでしょうか?(FTPで見ても、どこにアップロードされているか確認できませんでした) ■質問2 ・アップロードされたファイルを受け取るための処理は、サーバサイドでしか出来ないということでしょうか? つまり、JavaScript単独だと、画像をアップロードできても、受け取ることが出来ないので、意味がない?

    • ベストアンサー
    • AJAX
  • 画像のアップロードが出来ない

    →添付可能なファイルは.gif/.jpg/.jpeg/.png サイズは100KBまで。 ファイル名に半角スペースがあるとアップロードできません。 jpeg、サイズ100KB以下の画像を選択したのですが、アップロード出来ませんでした。なぜでしょうか。

  • Perlのファイルのアップロードの方法についてお聞きします。

    Perlのファイルのアップロードの方法についてお聞きします。 &ReadParseを用いた方法で、 $file = $in{'TENSOU'};で$file自体にデータが入るので 簡単だなと思っていましたが、送信元と送信後のファイルが若干違っていました。 使い方が間違っているのでしょうか? 以下、サンプル ◆HTML側 <FORM ACTION="up.cgi" ENCTYPE="multipart/form-data" METHOD="POST"><P> ファイル: <INPUT TYPE="file" NAME="TENSOU" SIZE="32"><BR> <INPUT TYPE="submit" VALUE="送信"> </FORM> ◆Perl側 &ReadParseの例を用いた方法 #!/perl/bin/perl #!/usr/local/bin/perl use CGI; use CGI::Carp qw(fatalsToBrowser); #--->エラー対策 require 'cgi-lib.pl'; require 'jcode.pl'; $BUFSIZE = 2048; &ReadParse; # ==> 強力な変換 $file = $in{'TENSOU'}; # ==> 実態自体がデータなので、取り扱いしやすい $file_size = length($file); $file_size *= ($BUFSIZE / 1024); open(OUT, "> test.jpg"); print(OUT $file); close(OUT); print "Content-type: text/html\n\n"; print "$file_size(KB)<br>\n"; print "<a href=\"test.jpg\">テスト</a>\n"; exit;

    • ベストアンサー
    • CGI
  • 画像投稿サイトで・・

    投稿すると次のエラーが発生します cgi-lib.pl: Request to receive too much data: ***** bytes 画像サイズはすべて指定以下のサイズなんです。 指定は200KBですが、投稿したい画像は58.0KBです。 縦横のサイズも指定以下ですし、拡張子も間違っていません。 この状態が半年続いてるんです・・・ 今更だとも思いますが、他に原因があるのでしょうか? 宜しくお願いします。