初心者だけどPerlが大好き

コードが世界を変える!

実際に先ほどの画像データをBase64でエンコードしてみます

ちなみに本当の画像の姿は これ。

その前に read関数の説明をば。
readは、ファイルハンドルからデータを読み取ります。
第1引数のファイルハンドルから第2引数の変数に
第3引数のバイト数分のデータを読み込みます

read [ FILEHANDLE ] , [ 受取らせる変数 ] , [ バイト数 ] ;
read(FILE, $buf, 60*57)として $bufをBase64エンコード 

この フォームに画像ファイルを添付すると
す、すると こんな無残なデータに画像が変換されてしまった・・・・


フォームは mail10.cgi とします
CSSは いつもの'form.css'を 付けてください

#!/usr/bin/perl
use CGI;
$q = new CGI;
print $q->header(-charset => 'utf-8'),
$q->start_html(-title=>"Example CGI.pm Form", -style=>{'src'=>'form.css'}),
$q->h1(' Example CGI.pm Form'),
$q->start_div({-class=>"aaa"}),
$q->p('これは class="aaa" の部分です'),
$q->start_multipart_form(-action=>"mail11.cgi"),
$q->em("What's your name?"),
$q->br,
$q->br,
$q->textfield('name'),
$q->checkbox('Not my real name'),
$q->br,
$q->em("What's your e-mail?"),
$q->br,
$q->br,
$q->textfield('email'),
$q->br,
$q->em("What's your subject?"),
$q->br,
$q->br,
$q->textfield('subject'),
$q->br,
$q->em('Any parting comments?'),
$q->br,
$q->br,
$q->textarea(-name=>'comments',-rows=>3,-columns=>50),
$q->br,
$q->br,
$q->filefield(-name=>'uploaded_file',
                -default=>'starting value',
                -size=>50,
                -maxlength=>80),
$q->reset,
$q->submit(-name =>'Action', -value =>'送信'),
$q->submit(-name =>'Action', -value =>'Scream'),
$q->end_multipart_form,
$q->end_div,
$q->start_div({-id=>"bbb"}), 
$q->h3('これは id="bbb" の部分です'),
$q->end_div,
$q->start_div({-class=>"ccc"}),
$q->h3('これは class="ccc" の部分です'),
$q->end_div,
$q->end_html;

ファイルネーム、ファイルハンドル,Base64された結果を出すスクリプト
mail11.cgi   とします

#!/usr/bin/perl
use CGI;
use Jcode;
use MIME::Base64;
my $q = CGI->new();
$name= $q->param('name');
$email= $q->param('email');
$subject= $q->param('subject');
$comments= $q->param('comments');
$mailto='trinity777@yahow.co.jp';
# ファイルネーム取得
my $filename = $q->param('uploaded_file');
my $fh = $q->upload('uploaded_file');
binmode $fh;
my $data ='';
while (read $fh,$buf,60*57){$data.=$buf;}
close $fh;
#バイナリデータをBASE64することでメール添付するためのASCIIテキストにする
$base64filebody = encode_base64($data,'');
print $q->header(-charset => 'utf-8'),  
$q->start_html('Mail Form'),
$q->h1("ファイルネーム$filename"),
$q->h2("ファイルハンドル$fh"),
$q->p($base64filebody),
$q->end_html;