ファイルアップロード (module)CGI
back
(なんか Perl の話じゃないけど)
HTML フォームの enctype="multipart/form-data" でフォームを作成、サーバへ
ファイルの内容を送信できるようにする。
プログラム側では普通の CGI と同様に、クライアントからのデータは
標準入力を読み込んで取得する。
その際の形式は
-------- boundary 文字列
Content-Disposition: form-data; name="フォームのキー名"; filename="ファイル名"
Content-Type: コンテントタイプ名
以下データ
:
:
:
-------- boundary 文字列
と、マルチパートメールとほぼ同じ構成。パート内の最初の空行以降をうまく内容を読んでくれ。
boundary については、メールと同じように、環境変数 CONTENT_TYPE から取得可能
($ENV{CONTENT_TYPE} が "multipart/form-data; boundary=HOGEHOGE" となっている)
メールと違うのは Base64 等でエンコードされてはいないので、該当箇所をそのまま read
して別ファイルに print してやれば OK
CGI モジュールを使う場合は、モジュールが勝手にいろいろやってくれるので便利。
----
use CGI;
my $q = new CGI;
my $file = $q->param('file');
open(F, "> outputfile") or die "error: $!";
while (<$file>) {
print F;
}
close(F);
----
見たいな感じで。
(かなりテキトー)
ただし、取得できるファイル名については、ブラウザ依存でフルパスだったり
ファイル名だけだったりするので、そのまま出力ファイル名に使いまわすのオススメしない。
back