With the use of AJAX, you can easily upload the selected file to your server and show a preview of it.
If you like to add a remove button to delete the file without page load then you again need to use AJAX to remove the file from the server.
I am using PHP to handle AJAX request on the server-side.
Contents
1. HTML
Create a <form > with file and button element.
Show the preview with delete button after upload in <div class='container'> using jQuery.
Completed Code
<form method="post" action="" enctype="multipart/form-data" id="myform"> <input type="file" id="file" name="file" /> <input type="button" class="button" value="Upload" id="but_upload"> </form> <!-- Image element container --> <div class="container"></div>
2. PHP
Create a new addremove.php file and upload folder.
Upload file
If $request == 1 then check the file extension and store the file in the upload directory.
Delete file
If $request == 2 then pass the POST source path in unlink() method to delete the file.
Completed Code
<?php
$request = $_POST['request'];
// Upload file
if($request == 1){
$filename = $_FILES['file']['name'];
/* Location */
$location = "upload/".$filename;
$uploadOk = 1;
$imageFileType = pathinfo($location,PATHINFO_EXTENSION);
// Check image format
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
$uploadOk = 0;
}
if($uploadOk == 0){
echo 0;
}else{
/* Upload file */
if(move_uploaded_file($_FILES['file']['tmp_name'],$location)){
echo $location;
}else{
echo 0;
}
}
exit;
}
// Remove file
if($request == 2){
$path = $_POST['path'];
$return_text = 0;
// Check file exist or not
if( file_exists($path) ){
// Remove file
unlink($path);
// Set status
$return_text = 1;
}else{
// Set status
$return_text = 0;
}
// Return status
echo $return_text;
exit;
}
3. Script
File Upload
On upload button click create a FormData Class object and append the file selected from the file element in it. Also, append request with 1 value.
Send an AJAX request where the pass FormData object.
On successful callback, if response is 1 then count the total <div class='content'> container and increment with 1. Create new <div class='content'> and use the count value to create id. Within the <div > create <img > with response value and <span > element.
Delete file using AJAX
To remove an image bind the click event on the class='delete'.
On click select the image source and display confirmation alert.
If OK button gets clicked then send an AJAX request where pass the path with a request: 2.
If response is 1 on successful callback then remove the <div > container.
Completed Code
$(document).ready(function(){
$("#but_upload").click(function(){
var fd = new FormData();
var files = $('#file')[0].files[0];
fd.append('file',files);
fd.append('request',1);
// AJAX request
$.ajax({
url: 'addremove.php',
type: 'post',
data: fd,
contentType: false,
processData: false,
success: function(response){
if(response != 0){
var count = $('.container .content').length;
count = Number(count) + 1;
// Show image preview with Delete button
$('.container').append("<div class='content' id='content_"+count+"' ><img src='"+response+"' width='100' height='100'><span class='delete' id='delete_"+count+"'>Delete</span></div>");
}else{
alert('file not uploaded');
}
}
});
});
// Remove file
$('.container').on('click','.content .delete',function(){
var id = this.id;
var split_id = id.split('_');
var num = split_id[1];
// Get image source
var imgElement_src = $( '#content_'+num+' img' ).attr("src");
var deleteFile = confirm("Do you really want to Delete?");
if (deleteFile == true) {
// AJAX request
$.ajax({
url: 'addremove.php',
type: 'post',
data: {path: imgElement_src,request: 2},
success: function(response){
// Remove
if(response == 1){
$('#content_'+num).remove();
}
}
});
}
});
});
4. Output
5. Conclusion
Use FormData object variable to send file value to AJAX file for store to the server and with unlink() method delete the file.
If you found this tutorial helpful then don't forget to share.
