WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:画像アップロードについて

0:[投稿] atusi [2003/01/16 01:29 ][環境:win2000 UNIX]

HTMLからの画像アップロードについてお尋ねしたいのですが、
現在、下のような形で一つの画像アップロードは出来ました。

しかし、
<input type="file" name="img_edit_01"> タグが
空の状態で送信すると、言い換えると画像を指定せずに
アップロードしようとすると、Internal Server Error が出ます。

(質問1)
HTMLにおいて、画像が指定されているかどうかの
チェックはどのようにしたらよいでしょうか?

(質問2)
複数の画像をアップロードしたい場合、
(変数名が img_edit_** といった具合に定まっていないのです)
どのように書き換えればよいでしょうか?

申し訳ありませんが、ご教授のほどよろしくお願いいたします。

sub ImageUpload
{

    use CGI;
    my $query = new CGI;

    # 変数定義
    my ($img_max, $imgdir, $filename, $buffer, $file, $file_size, $ext, $new_file);
    
    # 画像を保存するディレクトリ
    $imgdir = shift @_;

    # 画像ファイルのサイズ制限(KB)
    $img_max = '300';

    # HTMLのフォームの名称を一通りに限定
    $filename = $query->param('img_edit_01');
    
    # ファイルを読み込む
    while(read($filename, $buffer, 2048)) # 2048 は 2kB
    {
            $file .= $buffer;
            $file_size ++;
            if($file_size > $img_max / 2) { errorPrint("ファイルサイズが大きすぎます"); exit(1); }
    }
        
    # 拡張子を取り出す
    my $type = $query->uploadInfo($filename)->{'Content-Type'}; # ファイルのMIMEタイプを取得
    if    ($type =~ /jpeg/i) { $ext = 'jpg' }
    elsif ($type =~ /gif/i ) { $ext = 'gif' }
    else  { errorPrint("その形式の画像ファイルは保存できません"); exit(1); }
    
    # ファイル名を生成
    $new_file = "01" . ".$ext";
    
    # ファイルを指定ディレクトリにコピー
    open(OUT, "> $imgdir/$new_file") or errorPrint("ディレクトリ($imgdir) にコピー出来ませんでした。");
    binmode(OUT);
    print(OUT $file);
    close(OUT);
    chmod(0666, "$imgdir/$new_file");

}


1:[回答] 薫 [2003/01/16 09:04 ]

(質問1) の方だけですが
> <input type="file" name="img_edit_01"> タグが
> 空の状態で送信すると、言い換えると画像を指定せずに
> アップロードしようとすると、Internal Server Error が出ます。
sub ImageUpload に入る前に、img_edit_01の空欄チェックはされていますか?

%FORMにエンコードされているのであれば、こんな感じかと。
if($FORM{img_edit_01})?&ImageUpload:&error;


2:[完了] atusi [2003/01/16 11:24 ]

おっしゃる通りでした。
連番でフォームの値をつけておいて、
サブルーチンに渡す前に値があるかどうかチェックしてループすれば解決しました。

どうもありがとうございました。
本当に助かりました。

    # 画像アップロード
    for (my $i=1; $i<=99; $i++) # 複数画像アップにも対応する
    {
        $i = sprintf("%02d",$i);
        my $tmp = 'img_edit_'."$i";

        if($FORM{"$tmp"}) # 値があるかどうかチェック
        {&ImageUpload("$imgdir","$tmp");}
    }

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World