fuelPHPで同じ名前のファイルアップロードができない件
はじめに
fuelPHPで同じ名前のファイルがアップロードできないという事がありました。
応急処置的な対処をしたので、方法を書いておきます。
auto_rename
fuelのuploadでは同じ名前のファイルをアップロードする場合、
3つの方法が選べます。
auto_rename = true
として同じ名前のファイルがアップされたら元ファイル名_(数字).extensionとする。
auto_rename = false
として同じ名前のファイルがあったら書き込みをしない。
auto_rename = false overwrite =true
として同じ名前のファイルが来たら上書きする。
この3つです。
…ですが、auto_renameは正しく動いていないようです。
ここにauto_rename動いてねーよ!っていうプルリクが投げられた痕跡もあるようですが、
現状直ってない。
Fix auto_rename file checking logic by kenjis · Pull Request #1152 · fuel/core · GitHub
そもそもアップロードされた画像をそのままの名前で保存するのってどうなの?ってのもあるので、
今回は自分でrenameして保存することにします。
Uploadクラスのregistarメソッドでcallback関数を呼ぶ
詳しくはUpload 使い方 - クラス - FuelPHP ドキュメントに書いてあるのですが、
Uploadクラスのregistarメソッドでupload前の処理やあとの処理を設定できるようです。
registarの第1引数にvalidateを指定するとファイル保存前に処理を挟む事ができます。
これを使って、自分でファイル名を設定します。
Upload::register('validate',function(&$file){
$uid = uniqid("image_");
$file['basename'] = $uid;
$file['name'] = $uid;
$file['name'] .= ".".$file['extension'];
});
Upload::process();
if (Upload::is_valid())
{
Upload::save();
}
これでファイル名を指定してファイル保存ができます。