Laravelでは、フォームからアップロードされたファイルを簡単に処理する機能が備わっています。画像やPDFのような特定ファイルの受け入れ、ファイルサイズの上限設定、保存処理まで、セキュリティと実用性の両面から対応が可能です。この記事では、ファイルアップロードに必要なバリデーションと保存処理の方法について詳しく解説します。
ファイルアップロードフォームの作成
まずはHTML側にファイルアップロード用のフォームを作成します。
<form method="POST" action="{{ route('upload') }}" enctype="multipart/form-data">
@csrf
<input type="file" name="file">
<button type="submit">アップロード</button>
</form>
enctype="multipart/form-data"
を忘れずに指定することで、ファイルを正しく送信できます。
ルートの定義
routes/web.php
にアップロード処理用のルートを追加します。
use App\Http\Controllers\UploadController;
Route::post('/upload', [UploadController::class, 'store'])->name('upload');
コントローラの作成
以下のコマンドでアップロード用コントローラを作成します。
php artisan make:controller UploadController
作成したコントローラに、バリデーションと保存処理を記述します。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class UploadController extends Controller
{
public function store(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:jpeg,png,pdf|max:5120', // 5MBまで
]);
$path = $request->file('file')->store('uploads', 'public');
return back()->with('message', 'アップロードが完了しました:' . $path);
}
}
この例では、JPEG・PNG画像またはPDFのみを許可し、5MB(5120KB)までのサイズ制限を設けています。
保存先の設定と注意点
store()
の第1引数はディレクトリ名、第2引数には「ディスク名(例:public)」を指定します。保存されたファイルはstorage/app/public/uploads
に配置されます。
アップロードファイルを公開ディレクトリからアクセス可能にするには、以下のコマンドを一度実行しておく必要があります。
php artisan storage:link
これにより、public/storage
からファイルにアクセスできるようになります。
保存ファイルの情報を取得
アップロード後にファイル名などを取得したい場合は、以下のようなプロパティを利用できます。
$file = $request->file('file');
$originalName = $file->getClientOriginalName(); // 元のファイル名
$extension = $file->getClientOriginalExtension(); // 拡張子
$size = $file->getSize(); // バイト単位のサイズ
アップロード可能なファイルの種類(mimes)
Laravelのmimes
ルールで指定できる主な拡張子は以下のとおりです。
jpeg, png, gif
:画像ファイルpdf
:PDFファイルdoc, docx
:Wordファイルxls, xlsx
:Excelファイルcsv, txt
:テキストファイル
必要に応じてmimes:
ルールをカスタマイズすることで、特定形式のみ受け付ける設計が可能です。
アップロード失敗時のエラー表示
Bladeテンプレート内でバリデーションエラーを表示するには、以下のように記述します。
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
まとめ
Laravelでは、ファイルアップロード処理をシンプルかつ安全に実装することが可能です。適切なバリデーションと保存先の制御、CSRF保護、公開設定を行うことで、セキュアなファイルアップロード機能を構築できます。
画像、PDF、文書ファイルなどを扱うシステムで、ぜひ活用してみてください。