چگونه یک آپلودر پیشرفته Ajax با PHP و Jquery بسازیم ؟

آپلودر پیشرفته Ajax در PHP و Jquery – حتما در خیلی از وبسایت ها شاهد این بوده اید که بدون بارگذاری مجدد صفحه اطلاعات بارگذاری می شوند . مکانیزم Ajax دقیقا کارش همین است بدون نیاز به بارگذاری مجدد Http Request ارسال می کند به هر آدرسی که برای آیپی شما آزاد باشد . یکی از استفاده های جالب و کاربردی از ایجکس ساخت یک آپلودر است که بدون نیاز به بارگذاری صفحه فایل ها را ارسال کند . در این آموزش یاد خواهیم گرفته که چگونه یک آپلودر حرفه ای Ajax بسازیم
کدنویسی سمت سرور آپلود فایل
برای این که بتوانیم فایل های ارسال شده را دریافت کرده و در پوشه ای ذخیره کنیم نیاز به یک زبان سمت سرور داریم که از PHP استفاده می کنیم .
کد زیر را در یک فایل با نام upload.php ذخیره کنید .
<?php
if(!empty($_FILES['file'])){
$file = $_FILES['file'];
if($file['error'])
die('{"message" : "Unknown Error" , "status" : "0"}');
$type = $file['type'];
$valid_ext = ['video/x-matroska' , 'video/mp4'];
if(!in_array($type , $valid_ext))
die('{"message" : "You can only Upload {mp4} and {mkv} files !" , "status" : "0"}');
$name = $file['name'];
$name = explode('.' , $name);
$ext = end($name);
if(2<count($name)){
$name = array_slice($name , 0 , count($name) - 1);
$name = implode('.' , $name);
}else
$name = $name[0];
$timestamp = time();
$name = "{$name}-{$timestamp}.{$ext}";
$tmp_name = $file['tmp_name'];
$finall_path = "files/{$name}";
move_uploaded_file($tmp_name , $finall_path);
echo "{\"message\" : \"Your file Uploaded Successfully to {$finall_path}\" ,\"path\":\"{$finall_path}\" : , \"status\" : \"1\"}";
}
?>
در خط 12 می توانید فرمت هایی فایلی را که امکان ذخیره شدن روی سرور را دارند مشخص کنید باید به صورت mime type باشد . ما در این جا می خواهیم فقط امکان آپلود فایل های ویدیویی مثل mp4 و mkv وجود داشته باشد .
دقت داشته باشید که در کنار فایل upload.php یک فولدری به نام files هم ایجاد کنید .
بخش front-end آپلودر پیشرفته Ajax
حال نیاز است که ابتدا کتابخانه jquery را در head صفحه اضافه کنیم .
<script src="lib/jquery.min.js"></script>
دقیقا بعد از کد بالا استایل internal را اضافه می کنیم .
<style>
body {
text-align: center;
overflow-x: hidden;
}
#file {
display: none;
}
#upload {
background-color: orange;
color: black;
padding: 5px 20px;
font-size: 16px;
font-weight: bold;
outline: none;
border: none;
}
.progress-container {
width: 300px;
margin-left: calc((100% - 300px) / 2);
}
.progress-container #fill-progress {
background-color: #673AB7;
color: yellow;
display: block;
height: 7px;
width: 0;
}
.progress-container #number-progress {
display: block;
width: 100%;
margin-top: 15px;
text-align: center;
}
</style>
حال نوبت می رسد به فرم صفحه که شامل progress bar و درصد آپلود فایل و همچنین ورودی فایل است .
<form>
<div class="progress-container">
<span id="fill-progress"></span>
<span id="number-progress">0 %</span>
</div>
<input type="file" id="file" name="file">
<input type="button" id="upload" value="آپلود">
</form>
و در پایان کد های javascript که از کتابخانه jquery قدرت گرفته
$('#upload').click(openDialog);
$('#file').change(upload);
function openDialog(){
$('#file').click();
}
function upload(e){
//console.log(e);
const form = $('form')[0];
const dataForm = new FormData(form);
$.post({
url : "upload.php",
data : dataForm ,
processData : false,
contentType : false,
success : function(res){
console.log(res);
},
error : function(err){
console.log('error : ' + err);
},
xhr : function(e){
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress' , function(e){
var loaded = e.loaded;
var total = e.total;
var progress = (loaded / total * 100).toFixed(0);
// number-progress , fill-progress
$('#number-progress').text(progress + "%");
$('#fill-progress').css("width" , progress + "%");
});
return xhr;
}
});
}
دموی پروژه :

لیست نظرات
دوست عزیز سورس برنامه ایراد داره - پیام خطا صادر میشه
درود برنامه تست شده مشکلی نداره
عالی بود 👍👍👍
عالی من عاشق تمامی آموزش های شما هستم واقعا فوق العاده😍😍