Perlでのファイルアップロード:ファイルをサーバに保存
http://blogs.yahoo.co.jp/dk521123/11513644.htmlで使ったファイルロードを応用して、
CSVファイルをアップロードし、そのファイルを読み込んで、更にファイルをアップロードできるシステムを作ってみた。(ややっこしい)
サンプルプログラム
index.cgi(Mainファイル)
#!C:/Perl/bin/perl print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="">http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=SJIS" /> <title>Main -Management Page-</title> <style type="text/css"> <!-- h1 { font-size: x-large; color:#ffffff; background-color:#0000FF; padding:5px; font-weight:bold; display:block; border-left: 20px ridge #000099; padding-left:3px; height : 50px; padding:4px 0px 0px 9px; padding-top: 20px; } h2 { padding:5px 0 5px 15px; border-left:#6666FF 15px solid; border-bottom:#666666 1px solid; font-size: large; font-weight: bold; color:#333; } --> </style> </head> <body> <h1>管理メイン画面</h1> <h2>管理者メニュー</h2> <p>選択してください。</p> <h3>システム管理</h3> <ol> <li><a href="fileUpLoad1.cgi">CSVをアップロードする</a><br> <li><a href="fileUpLoad2.cgi">アップロードする</a><br> <li><a href="">CSVをアップロードする</a><br> <li><a href="">アップロードする</a><br> </li> </ol> <h3>管理</h3> <ol> <li><a href="">CSVをアップロードする</a><br> </ol> </body> </html> END_OF_HTML exit;
fileUpload1.cgi
#!C:/Perl/bin/perl # To Define Message # for en #use constant MESSAGE_SUCCESS => "File Upload is successful!!"; #use constant MESSAGE_FAILED => "Failed to upload the file..."; #use constant MESSAGE_VALIDATION_ERROR1 => "Please Select a file..."; # For jp use constant MESSAGE_SUCCESS => "アップロードが完了しました。"; use constant MESSAGE_FAILED => "アップロードに失敗しました。再試行してください。"; use constant MESSAGE_VALIDATION_ERROR1 => "ファイルを選択してください。"; use encoding "shift-jis"; use File::Basename qw(basename); $myFilename = basename($0, ''); use CGI; # To Output-1 print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="">http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=SJIS" /> <title>CSV File Upload -1-</title> <style type="text/css"> <!-- h1 { font-size: x-large; color:#ffffff; background-color:#0000FF; padding:5px; font-weight:bold; display:block; border-left: 20px ridge #000099; padding-left:3px; height : 50px; padding:4px 0px 0px 9px; padding-top: 20px; } h2 { padding:5px 0 5px 15px; border-left:#6666FF 15px solid; border-bottom:#666666 1px solid; font-size: large; font-weight: bold; color:#333; } --> </style> </head> <body> <h1>管理画面</h1> <h2>CSVをアップロード</h2> <p>アップロードするCSVファイルを選択し、「アップロード」ボタンをクリックしてください。</p> END_OF_HTML if ($ENV{'REQUEST_METHOD'} eq "POST") { $query = new CGI; # To Get File Name $filename = $query->param('fileName'); # Validation for Form data if (length($filename) == 0) { # Form data is nothing... print "<div style='color:red' align='center'>" . MESSAGE_VALIDATION_ERROR1 . "</div>"; } else { # Exist Form data # To Get MIME type $type = $query->uploadInfo($filename)->{'Content-Type'}; # To Get File data while($bytesread = read($filename, $buffer, 2048)) { $file .= $buffer; } $filePath = "> ./data1/" . $filename; # To save the file open(OUT, $filePath) or die(MESSAGE_FAILED); binmode(OUT); print(OUT $file); close(OUT); # To display a message for saving successfully print "<div style='color:red' align='center'>" . MESSAGE_SUCCESS . "</div>"; } } # To Output-2 print << "END_OF_HTML"; <form name="frm" method="post" action="/cgi-bin/Perl/$myFilename" enctype="multipart/form-data" value="選択"> <input type="file" name="fileName" size="60"><BR> <input type="submit" name="submit" value="アップロード"> </form> <div align='center'><a href="./index.cgi">管理メニューに戻る</a></div> </body> </html> END_OF_HTML exit;