Archive for the ‘Perl’ Category
シンプルな画像アップロードCGI
cgi-lib.pl を使う場合。
問答無用で全POSTデータを読み込むので、場合によっては効率が悪い。その分コードは美しい(まさに必要な文脈だけを伝えている)。
img_up.pl
# 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
# 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";
You are currently browsing the archives for the Perl category.