CGI::Upload - ブラウザ・ファイル・アップロードをハンドリングするためのCGIクラス
use CGI::Upload;
my $upload = CGI::Upload->new;
my $file_name = $upload->file_name('field'); my $file_type = $upload->file_type('field');
$upload->mime_magic('/path/to/mime.types'); my $mime_type = $upload->mime_type('field');
my $file_handle = $upload->file_handle('field');
このモジュールは、Webブラウザを介したmultipart/form-dataリクエスト中のアップロードされたファイルを扱う簡単で安全な作法を提供するために書かれています。このモジュールの、既存モジュールに対する第一の利点は、アップロードされたファイルに対してもっとも頻繁に必要とされる情報を提供する、作法に沿ったシングル・インターフェースです。
このモジュールはCGIとFile::MMagicモジュール上に組み上げられ、multipart/form-dataリクエストによりアップロードされたファイルのハンドリングのためのきちんとした簡潔なメソッドを提供します。
CGIスクリプト中で、以下のメソッドをこのモジュールを介して利用することができ、リクエストに応じて呼び出し名前空間にエクスポートすることができます。
新しいCGI::Uploadオブジェクトを生成して返すオブジェクト・コンストラクタ・メソッドです。CGI::Uploadの以前のバージョンでは、使用されるCGIオブジェクトは必須の引数として要求されました。これはCGIオブジェクトのシングルトンの自然性から、必要ではなくなりました。
実験的に、現在、CGI.pmライクな任意のモジュールを使用できます。要求事項は、->paramメソッドと、ファイルハンドルを返す->uploadメソッドをサポートすることです。この機能は、モジュール名を与えるか、既存のオブジェクトを与える二通りの方法で使えます。定型的な場合、CGI::Uploadはそのモジュールのrequireを試み、モジュールをロードできなかった時はcroakします。これはCGI.pmとCGI::Simpleでテストされました。
テストはCGI::Simpleの0.075版で行いました。
0.071版のCGI::Simpleでは壊れることが知られていますので、そのケースでは自らdieするように関連付けています。
Examples:
use CGI::Upload; CGI::Upload->new({ query => "CGI::Simple"});
or
use CGI::Upload; use CGI::Simple; $CGI::Simple::DISABLE_UPLOADS = 0; # これはインスタンス生成前にセットする必要があります my $q = new CGI::Simple; CGI::Upload->new({ query => $q});
CGI::Uploadクラスで使用されるCGIオブジェクトを返します。
このメソッドは、'field'という名前のフォーム・インプット・フィールドからアップロードされたファイルが格納された一時ファイルの、ファイルハンドルを返します。この一時ファイルは可能であれば、本質的には無名でIO::Fileのnew_tmpfileメソッドを使って生成されます。
このメソッドは、'field'という名前のフォーム・インプット・フィールドからアップロードされたファイルのファイル名を返します - このファイル名はアップロードされたファイルのローカルの一時ファイル名ではなく、クライアント・ウェブ・ブラウザから与えられたファイル名を反映したものです。
このメソッドは、アップロードされたファイルのファイルタイプを、ファイル名の拡張子から特定して返します - これは必ずしもアップロードされたファイルの本質を反映していないことには注意が必要ですが、CGIスクリプトがとりあえずアップロードされたファイルのファイルタイプでのバリデーションを行うことができるでしょう。
このメソッドは、mime_typeメソッドでファイルを識別するのに使われる、外部のmagic mime typesファイルを(セットして)返します。デフォルトでは、MIME識別はFile::MMagicで定義された内部mime typesに基づいて行われます。
See File::MMagic for further details.
このメソッドは、MIMEタイプ このメソッドは、'field'という名前のフォーム・インプット・フィールドからアップロードされたファイルのMIMEタイプを、ファイルのマジック・ナンバーを元に特定して返します。アップロードされたファイルの内容でバリデートするという意味でこれがベストです。
この詳細はFile::MMagicを参照してください。
バグはRTに報告してください: http://rt.cpan.org/NoAuth/Bugs.html
なぜテスト・カバレッジが100%ではないのか説明する...
より良いMIMEマジックサポートの追加(RT上のリクエストを参照)
複数ファイルアップロードのサポート状況のテストと、問題があればFix
Apache::Requestのサポート
CGI::Minimalのサポート
Mark Stosbergによるコードの例 (CGI::Uploader):
if ($q->isa('CGI::Simple') ) { $fh = $q->upload($filename); $mt = $q->upload_info($filename, 'mime' );
if (!$fh && $q->cgi_error) {
warn $q->cgi_error && return undef;
}
}
elsif ( $q->isa('Apache::Request') ) {
my $upload = $q->upload($file_field);
$fh = $upload->fh;
$mt = $upload->type;
}
# default to CGI.pm behavior
else {
$fh = $q->upload($file_field);
$mt = $q->uploadInfo($fh)->{'Content-Type'} if $q->uploadInfo($fh);
if (!$fh && $q->cgi_error) {
warn $q->cgi_error && return undef;
}
}
CGI, HTTP::File
Copyright 2002-2004, Rob Casey, rob.casey@bluebottle.com
Original author: Rob Casey, rob.casey@bluebottle.com
Current mainainer: Gabor Szabo, gabor@pti.co.il
Thanks to
Mark Stosberg for suggestions.
and to the CPAN Testers for testing.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Makio Tsukamoto, tsukamoto@gmail.com