ファイルのアップロード
 
画像のアップロードでは、CGI_Lite.pmを使うと簡単に処理できます。
サーバ上のファイル名は変換されてしまったりするので、convNameですべて小文字にしたり、空白文字をアンダースコア'_'にしています。convNameを書き換えて好みのファイル名にすることができます。

Microsoft IISおよびPWSでは、Posting Acceptorというモジュールを追加する必要があるかもしれません。
詳しくは http://www.microsoft.com/mscorp/worldwide/japan/support/kb/articles/j030/9/91.htm を参考にしてください。

[サンプルプログラムの実行]
 
 
upload.cgi
#!/usr/bin/perl
#
# upload.cgi
#
# (C)1999 Kaoru Fujita
#
use lib './lib';

use CGI_Lite;
require 'util.pl';

#
# 定数
#
$Title = 'ファイルのアップロード サンプル';
$Temp = './tmp';
$Platform = 'Unix';
$BUFSZ = 2048;
$CharSet = 'EUC';

$upload = new CGI_Lite;

# アップロード先
$upload->set_directory($Temp) or
        exitError("ディレクトリ $Temp がオープンできません。");
# プラットフォームの設定
$upload->set_platform($Platform);
# バッファーサイズの設定
$upload->set_buffer_size ($BUFSZ);
# ファイル名の変換
$filename = $upload->filter_filename(\&convName);

$upload->close_all_files;

# フォームデータの解析
%data = $upload->parse_form_data;

if ($upload->is_error()) {      # アップロードのエラー
        exitError($upload->get_error_message());
}


print <<END_OF_HTML;
Content-type: text/html

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=$CharSet">
<TITLE>$Title</TITLE>
</HEAD>
<BODY>
アップロードに成功しました。
</BODY>
</HTML>
END_OF_HTML

exit(0);

sub convName
{
        local($name) = shift;

        $name =~ tr/A-Z/a-z/;                # 大文字から小文字へ変換
        $name =~ s/(?:%20)+/_/g;             # 空白文字を_に変換
        $name =~ s/%[\da-fA-F]{2}//g;        # %xx を削除

        return ($name);
}

#--End of upload.cgi

 
upload.html
<HTML>
<HEAD>
<TITILE>ファイルのアップロード</TITLE>
</HEAD>
<BODY>
<FORM ACTION="/cgi-bin/upload.cgi" ENCTYPE="multipart/form-data" METHOD="POST">
ファイル: <INPUT TYPE="file" NAME="File" SIZE="32"><BR>
<INPUT TYPE="submit" VALUE="送信">
</FORM>
</BODY>
</HTML>



ファイル一覧

cgi-bin/upload.cgi
cgi-bin/lib/CGI_Lite.pm

docs/Samples/upload.html