シンプルな画像アップロードCGI

cgi-lib.pl を使う場合。

問答無用で全POSTデータを読み込むので、場合によっては効率が悪い。その分コードは美しい(まさに必要な文脈だけを伝えている)。

img_up.pl

#!perl

# cgi-lib.plを使う場合

require "cgi-lib.pl";
$cgi_lib::maxdata = 500000; #必要であれば上限値変更

print "Content-type: text/html; charset=Shift_JIS;\n\n";
print "<html><body>\n";

if($ENV{REQUEST_METHOD} ne 'POST'){
	# フォーム
	print '<form action="img_up.pl" enctype="multipart/form-data" method="POST">';
	print '<input type="file" name="img" size="50">';
	print '<input type="submit" value="送信">';
	print '</form>';
}
else{
	# パラメータ読み取り
	ReadParse(*IN);
	
	# 書き出し
	open(OUT,">test.jpg");
	binmode OUT;
	print OUT $IN{'img'};
	close(OUT);
	
	# 結果
	print 'アップしました。<br><img src="test.jpg">';
}

print "\n</body></html>\n";

CGI.pmを使う場合

必要なときだけ読み込み処理を行えるので、柔軟性がある。

img_up2.pl

#!perl

# CGI.pm を使う場合

use CGI;

print "Content-type: text/html; charset=Shift_JIS;\n\n";
print "<html><body>\n";

if($ENV{REQUEST_METHOD} ne 'POST'){
	# フォーム
	print '<form action="img_up2.pl" enctype="multipart/form-data" method="POST">';
	print '<input type="file" name="img" size="50">';
	print '<input type="submit" value="送信">';
	print '</form>';
}
else{
	# パラメータ読み取り
	my $q = new CGI;
	
	# 読み取り -> $data
	my $file = $q->param('img');
	my $data;
	while(read($file, my $tmp, 1024)){
		$data .= $tmp;
	}
	
	# 書き出し
	open(OUT,">test2.jpg");
	binmode OUT;
	print OUT $data;
	close(OUT);
	
	# 結果
	print "file = $file<br>";
	print 'アップしました。<br><img src="test2.jpg">';
}

print "\n</body></html>\n";
Leave a comment

0 Comments.

Leave a Reply

( Ctrl + Enter )