Uploading a file in any programming is a challenge. In this post, we focus on uploading a file and some validations to use with file upload using Laravel.
To upload a file using Laravel, you can follow these steps:
Create a new form in your Laravel view with an input field for the file:
<form method="POST" action="{{ route('file.upload') }}" enctype="multipart/form-data">
@csrf
<input type="file" name="file">
<button type="submit">Upload</button>
</form>
In above code, we have added file.upload
route as an action of the form. So, we need to define this route in routes/web.php
file. This route should point to the controller method that will handle the file upload.
The following code will define a new route in your routes/web.php
file:
Route::post('/file/upload', [App\Http\Controllers\FileController::class, 'upload'])->name('file.upload');
Above code has defined a route, which points to the upload
method of the FileController
. So, create a new controller FileController
and method upload
inside that to handle the file upload as follows:
class FileController
{
public function upload(Request $request)
{
// Validate the uploaded file
$request->validate([
'file' => 'required|file|max:1024', // limit file size to 1 MB
]);
// Store the uploaded file in the storage/app/public directory
$path = $request->file('file')->store('public');
// Generate a URL for the uploaded file
$url = Storage::url($path);
// Redirect back with a success message
return back()->with('success', 'File uploaded successfully: ' . $url);
}
}
In the upload()
method, we first validate that the uploaded file meets our requirements. So, we have added some validations for our file. These validations are as follows:
The field under this validation must be present in the input data and must not empty. A field is “empty” if it meets one of the following criteria:
- The value is
null
. - The value is an empty string.
- The value is an empty array or empty
Countable
object. - The value is an uploaded file with no path.
The field under this validation must be a successfully uploaded file.
The field under this validation must be less than or equal to a 1024 bytes. Here, 1024 is value of file size. You can change it according to your requirements.
We then use the store()
method on the uploaded file to store it in the storage/app/public
directory. This directory is publicly accessible, so we can generate a URL for the file using the url()
method on the Storage
facade. Finally, we redirect back to the form with a success message that includes the URL of the uploaded file.
You can now test the file upload functionality by navigating to the form and selecting a file to upload. If the file meets the validation requirements, it will be uploaded and a success message will be displayed. You can then access the uploaded file at the generated URL.