File をアップロードする CGI


ただいまドキュメント作成中!
今は、適当なファイルをアップされても困るので指定したファイルの中身を表示するプログラムとしておきました。そこで、
添付ファイル
このHTMLのフォーム部分
<FORM ACTION="../../cgi-bin/fileup.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
    添付ファイル <INPUT TYPE="FILE" NAME="filename"><BR>
    <INPUT TYPE="SUBMIT" VALUE="実行">
</FORM>


  == ソース [fileup.cgi]==
#!/usr/local/bin/perl

print "Content-Type: text/html\n\n";
$content_type = $ENV{CONTENT_TYPE};
(@content_types) = split(/; /,$content_type);
foreach (@content_types){
  if (/^boundary=(.*)$/i){
    $boundary = $1;
    $boundary =~ s/^"(.*)"$/S1/;
    last;
  }
}
die if $ENV{CONTENT_LENGTH} > 100*1024;
read(STDIN, $form_data, $ENV{CONTENT_LENGTH});
$form_data =~ s/--$boundary--(.|\n)*$//;
@form_data = split(/\r?\n--$boundary\r\n/,$form_data);
foreach $part (@form_data){
  $name= "";
  @part = split(/\r\n/,$part);
  while(($_ = shift(@part)) ne ""){
    if (/^Content-Disposition: /i){
      @disposition = split(/; /,$_);
      foreach(@disposition){
        if(/^name=(\S*)/){
          $name = $1;
          $name =~ s/^"(.*)"$/$1/;
        }
      }
    }elsif(/^Content-Type: (\S*)/i){
      $ctype{$name};
    }
  }
  $content{$name} = join("
\n",@part); } print "$content{'filename'}\n"; exit(0);


最終更新 :
Yoshiro Yamamoto <yama@main.eng.hokudai.ac.jp>