How to Create upload a file in Laravel 8
With file upload, a user can import file data to the database, upload media files, etc.
In this tutorial, I show how you can upload a file and add validation in the Laravel 8 project
.1. Controller
Create a PageController
controller.
php artisan make:controller PageController
Create 2 methods –
- index() – Load
index
view. - uploadFile() – This method is used to upload the file.
Define file validation. I set the max upload file size to 2 MB (2048 KB).
If successfully validated then assign the file name to $filename
and upload location "files"
to the $location
variable.
Execute $file->move($location,$filename);
to store the file.
Use SESSION flash to store upload status and class name.
Redirect to "/"
.
Completed Code
<?php
namespace App\Http\Controllers;
use Session;
use Illuminate\Http\Request;
class PageController extends Controller {
public function index(){
return view('index');
}
public function uploadFile(Request $request){
// Validation
$request->validate([
'file' => 'required|mimes:png,jpg,jpeg,csv,txt,pdf|max:2048'
]);
if($request->file('file')) {
$file = $request->file('file');
$filename = time().'_'.$file->getClientOriginalName();
// File upload location
$location = 'files';
// Upload file
$file->move($location,$filename);
Session::flash('message','Upload Successfully.');
Session::flash('alert-class', 'alert-success');
}else{
Session::flash('message','File not uploaded.');
Session::flash('alert-class', 'alert-danger');
}
return redirect('/');
}
}
2. Route
- Open
routes/web.php
file. - Define 2 routes –
- / – Load index view.
- /uploadFile – This use to upload a file.
Completed Code
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PageController;
Route::get('/', [PageController::class, 'index']);
Route::post('/uploadFile', [PageController::class, 'uploadFile'])->name('uploadFile');
3. View
Create index.blade.php
file in resources/views/
.
Display bootstrap alert message if 'message'
Session exists. Also, set alert class using 'alert-class'
Session.
Create <form action="{{route('uploadFile')}}" enctype='multipart/form-data' method="post" >
.
In the <form >
create a file element and a submit button.
Display error in <span >
if not validated.
Completed Code
<!DOCTYPE html>
<html>
<head>
<title>How to upload a file in Laravel 8</title>
<!-- Meta -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<!-- Alert message (start) -->
@if(Session::has('message'))
<div class="alert {{ Session::get('alert-class') }}">
{{ Session::get('message') }}
</div>
@endif
<!-- Alert message (end) -->
<form action="{{route('uploadFile')}}" enctype='multipart/form-data' method="post" >
{{csrf_field()}}
<div class="form-group">
<label class="control-label col-md-3 col-sm-3 col-xs-12" for="name">File <span class="required">*</span></label>
<div class="col-md-6 col-sm-6 col-xs-12">
<input type='file' name='file' class="form-control">
@if ($errors->has('file'))
<span class="errormsg text-danger">{{ $errors->first('file') }}</span>
@endif
</div>
</div>
<div class="form-group">
<div class="col-md-6">
<input type="submit" name="submit" value='Submit' class='btn btn-success'>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
4. Output
5. Conclusion
Modify the validation according to your requirement in the controller. Specify upload location in $location
variable.
Folder created while uploading if not exists.
If you are allowing to upload large files then make sure to check upload_max_filesize
and post_max_size
values in the php.ini file and update it if required.
You can view this tutorial to know jQuery AJAX file upload in Laravel 8.
0 Response to "How to Create upload a file in Laravel 8"
Post a Comment