目次

AlFile ファイルアップロード

ファイルアップロード用ウィジェットです。

コンストラクタ

AlFile.new("名前", オプション)

オプション

使用例

必須入力フラグ
AlFile.new("file1", :required=>true )

ファイルアップロードの特殊性

フォームタグの記述

ファイルをアップロードするフォームは、enctype="multipart/form-data" でなければなりません。

<form name="form1" id="form1" method="post" action="<%=h make_uri(...) %>" enctype="multipart/form-data">

フォーム自動生成する場合

フォーム自動生成する場合は、以下のようにします。

@form = AlForm.new(
  AlFile.new( "file1", :label=>"画像ファイル" ),
  ...
)
@form.tag_attr = { :enctype=>"multipart/form-data" }

テンプレート

<%= @form.make_tiny_form() %>

アップロードされたファイルの利用

アップロードされたファイルは、テンポラリファイルとして保存され、バリデーション後に利用可能になります。 また、スクリプトの終了時に自動的に消去されます。

@form.validate()
@form[:file1][:tmp_name]       # テンポラリファイル名
@form[:file1][:size]           # ファイルサイズ
@form[:file1][:content_type]   # コンテンツタイプ (image/jpeg等)

アップロードされたファイルをそのまま保存する

アップロードされたファイルを加工などをせず、そのままファイルとして保存する場合に便利なように、以下の手順が用意してあります。

@form.widgets[:file1].save_file()   # ファイルの恒久化
@form[:file1][:saved_name]          # 付与されたランダムファイル名

保存する場所をあらかじめ指定しておいてから使います。

AlFile.dirname = "/PATH/TO/SAVE/DIR"
@form.validate()
@form.widgets[:file1].save_file()

ファイル名をランダムに付与しない(固定のファイル名)場合は、File.link を使います。

AlFile.dirname = "/PATH/TO/SAVE/DIR"
@form.validate()
File.link( @form.widgets[:file1][:tmp_name], "FILENAME" )