今回もLaravel 5.6, 5.7 管理画面パッケージ「Voyager」の機能についてご紹介します。
Voyagerから画像をアップロードするとデフォルトでは20文字の乱数が与えられます。
/vendor/tcg/voyager/src/Http/Controllers/ContentTypes/Image.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
protected function generateFileName($file, $path) { if (isset($this->options->preserveFileUploadName) && $this->options->preserveFileUploadName) { $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension()); $filename_counter = 1; // Make sure the filename does not exist, if it does make sure to add a number to the end 1, 2, 3, etc... while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) { $filename = basename($file->getClientOriginalName(), '.'.$file->getClientOriginalExtension()).(string) ($filename_counter++); } } else { $filename = Str::random(20); //ここ // Make sure the filename does not exist, if it does, just regenerate while (Storage::disk(config('voyager.storage.disk'))->exists($path.$filename.'.'.$file->getClientOriginalExtension())) { $filename = Str::random(20); //乱数被りを制御 } } return $filename; } |
開発要件次第では、元ファイル名を維持したままファイルをアップロードしたい、、、という場合もあると思います。
そんな時もVoyagerならチョチョイのチョイです。
今回もproductsテーブルを例に紹介します。
①テーブルにimageカラムを追加します。この時Typeはtextやvarcharを選択してください。
②/admin/bread/products/edit(BREAD編集画面)にて、ImageのOption Detailsに以下を追記。Input TypeをImageに変更。
1 2 3 |
{ "preserveFileUploadName": true } |
これだけで元ファイル名を維持したまま画像をアップロード可能です!
InputType:ImageのみでなくRichTextBoxなどにも使用出来ますので、必要になった時に使用してください。
※なお、同名のファイルが既に存在する場合、Image.png->Image1.pngのように保存されます。
こういう便利なの、ドキュメントに書いといてくれよ、、、
※2018年9月9日追記
日本語ファイル名を維持したままアップロードすると、エラーが発生することがわかりました。解消法はこちらを参照ください。
コメントを書く