Validate Files with Laravel's Fluent File Rule
File uploads often need more than a simple required rule. You may need to restrict file types, set size limits, or accept images only.
Laravel's fluent File rule makes these requirements easier to read.
Basic Usage
use Illuminate\Validation\Rules\File;
$request->validate([
'document' => [
'required',
File::types(['pdf', 'doc', 'docx'])
->max('5mb'),
],
]);
This accepts supported document types up to 5 MB. Laravel determines file types using the file's contents, not only its extension.
Validate Images
For profile photos or product images, use File::image():
$request->validate([
'image' => [
'required',
File::image()
->max('2mb'),
],
]);
You can also restrict image dimensions:
$request->validate([
'image' => [
'required',
File::image()
->dimensions(
Rule::dimensions()
->maxWidth(2000)
->maxHeight(2000)
)
->max('2mb'),
],
]);
Remember to import the dimensions rule:
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\File;
Real-World Example
Imagine an e-commerce application where administrators upload product images. You want to accept images up to 2 MB and prevent excessively large dimensions.
$request->validate([
'product_image' => [
'required',
File::image()
->max('2mb')
->dimensions(
Rule::dimensions()
->maxWidth(2000)
->maxHeight(2000)
),
],
]);
This keeps the upload requirements together in one readable validation rule.
When Should You Use It?
- Product image uploads
- Profile photos
- PDF documents
- Resume uploads
- Attachments in admin panels