Perl 「 モジュール 」 CGI.pm フォーム ファイルアップロードフィールド (0x108)

セラ (perlackline)

2014年09月30日 18:41



目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x108 回。

CGI.pm で、ファイルアップロードフィールドを作成する。



アップロードフィールド



メソッド「 filefield() 」は、ファイルをアップロードするためのフィールドを提供します。アップロードのためのフィールドがどの様なものか確認します。

なお、このフォームでは、その特性を活かすために、エンコーディングタイプを「 &CGI::MULTIPART 」としておく必要があります。

エンコーディングタイプ「 &CGI::MULTIPART 」は、(0xfd) で確認しました。


filefiled() のコード



メソッド filefield() は次の様に記述します。


print $q->filefield( -name => 'upload',
-default => 'default value',
-size => 50,
-maxlength => 80);



設定するパラメータは、(0x104) で確認したテキストフィールド用のメソッド textfield() とまったく同じですから、次の様に記述することも可能です。


print $q->filefield('upload', 'default value', 50, 80);



1 番目のパラメータ「 -name 」以外はすべてオプションです。この辺りもメソッド textfield() と同じですが、パラメータ「 -default 」に関してはやや注意が必要です。

なぜなら、セキュリティ上の理由から、多くの Web ブラウザは、ファイルフィールドでのデフォルト値をサポートしていないからです。ですから、パラメータの値として何を設定したとしても、Web ブラウザからは無視されます。

このフォームは、JavaScript を利用した次のパラメータを理解するとのことです。

  -onChange
  -onFocus
  -onBlur
  -onMouseOver
  -onMouseOut
  -onSelect


HTML コード




上記 Perl コードから生成される HTML コードは次の通りです。


<input type="file" name="upload" value="default" size="50" maxlength="80" />



input 要素で生成されているということは、テキストフィールドの生成と同様に、メソッド input() が利用出来ます。パラメータは type を利用します。


print $q->input({ -type => 'file',
-name => 'upload',
-default => 'default',
-size => 50,
-maxlength => 80} ));



パラメータ -type では、HTML の input 要素に合わせて「 file 」の文字列を設定します。これで、メソッド filefield() を利用した場合と同様の機能を実現出来ます。


Web ブラウザでの表示



いつのも HTML コードを利用して Web ブラウザ ( Chrome 37.0 ) での表示と動作を確認します。



何やら馴染みのあるボタンが設置されています。少しだけドキドキしながら、[ ファイルを選択 ] ボタンを押下します。するとどうでしょう。これもまたお馴染みのファイル選択画面が現れました。



え、たったこれだけで、ファイルのアップロードが完了するの ? すごーい。

そう思っていた時期が僕にもありました。


0x108 -> 0x109 へ



メソッド filefield() だけでは、ファイルのアップロードは出来ません (キリ。

次回は、ファイルアップロードの基本的な処理を確認します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index












関連記事