Hello to all, welcome to therichpost.com. In this post, I will tell you, How to upload multiple images in laravel 6 with ajax?
Post Working:
In this post, I am uploading multiple images in laravel 6 with ajax.
Here is the working code snippet and please follow carefully:
1. Here is the code , you need to add into your Blade template file:
Here is the code for upload image(HTML CODE) and you can add this code any blade template file:
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">Add Media Images : </div>
<div class="alert alert-success" style="display:none">
<p></p>
</div>
<div class="card-body">
<form enctype="multipart/form-data" method="post">
<div class="form-group">
<label for="image"><strong>Add Media:</strong></label>
<input type="file" class="form-control" id="image-upload" placeholder="Post Image" name="image_upload[]" required multiple>
</div>
<button type="button" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
jQuery("document").ready(function($) {
// Full Ajax request
$(".btn").click(function(e) {
// Stops the form from reloading
e.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': "{{ csrf_token() }}"
}
});
let image_upload = new FormData();
let TotalImages = $('#image-upload')[0].files.length; //Total Images
let images = $('#image-upload')[0];
for (let i = 0; i < TotalImages; i++) {
image_upload.append('images' + i, images.files[i]);
}
image_upload.append('TotalImages', TotalImages);
$.ajax({
url: "{{ url('addmedia') }}",
type: 'POST',
contentType: false,
processData: false,
data: image_upload,
success: function(result) {
$("div.alert").show();
$("div.alert p").text(result.message);
$('#image-upload').val("");
setTimeout(function() {
$("div.alert").hide();
}, 3000); // 5 secs
}
});
});
});
</script>
@endsection
2. Here is code for route/web.php file:
This code will connect form data to controller file:
Route::post('/addmedia', 'HomeController@createmedia')->middleware('ajax');
3. Here is the controller file code app\Http\Controllers\HomeController.php file:
This code will save images into folder and database and I have created images table into my database :
public function createmedia(Request $request)
{
if($request->TotalImages > 0)
{
//Loop for getting files with index like image0, image1
for ($x = 0; $x < $request->TotalImages; $x++) {
if ($request->hasFile('images'.$x)) {
$file = $request->file('images'.$x);
$filename = $file->getClientOriginalName();
$extension = $file->getClientOriginalExtension();
$picture = date('His').'-'.$filename;
//Save files in below folder path, that will make in public folder
$file->move(public_path('pages/'), $picture);
$postArray = ['image' => $picture,];
DB::table('images')->insert($postArray);
}
}
$images = DB::table('images')->orderBy('id', "desc")->get();
return response()->json(["message" => "Media added successfully.", "images" => $images]);
}
else
{
return response()->json(["message" => "Media missing."]);
}
}
4. I have used Ajax Middleware and for creating ajax middleware, you have to check below link and do that functionality:
This is it and if you have any kind of query then please do comment below.
Jassa,
Thank you
