Um ein Ereignis nach dem Klicken auf eine Schaltfl?che auszuführen, ?ffnen Sie das lokale Dateiverwaltungssystem, w?hlen Sie dann die Datei aus und w?hlen Sie dann Hochladen
歡迎選擇我的課程,讓我們一起見(jiàn)證您的進(jìn)步~~
前段時(shí)間封裝的一個(gè)方法,使用ajax和formData方法,實(shí)現(xiàn)文件上傳,在上傳的過(guò)程中顯示上傳進(jìn)度
js
$('#upload').on('click',function(){
var xhr = new XMLHttpRequest();
xhr.open('post','../PHP/post_file.php',true);
// 獲取上傳進(jìn)度
xhr.upload.onprogress = (ev)=>{
var scale = Math.round( (ev.loaded/ev.total)*100 );
$('.text').html( scale + '%');
$('.progress').css('width', scale + '%');
};
xhr.onload = ()=>{
console.log('上傳成功');
};
// 通過(guò)file表單的files屬性拿到文件數(shù)據(jù) 通過(guò)formData將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制格式
var fileInfo = new FormData();
fileInfo.append( 'file',$('#iptFile')[0].files[0] );
// 發(fā)送數(shù)據(jù)
xhr.send(fileInfo);
});
html
<form action="">
<input type="file" id="iptFile">
<input type="button" id="upload" value="點(diǎn)擊上傳"/>
</form>
<p class="box">
<p class="progress"></p>
<p class="text">
0%
</p>
</p>
css
.box{
position: relative;
width: 400px;
height: 50px;
border:1px solid #000;
margin-top:30px;
}
.progress{
width: 0%;
height: 100%;
background-color: red;
}
.text{
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
text-align: center;
}
php (php非本人所寫(xiě))
<?php
header('Content-type:text/html; charset="utf-8"');
$upload_dir = 'uploads/';
if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
exit_status(array('code'=>1,'msg'=>'錯(cuò)誤提交方式'));
}
if(array_key_exists('file',$_FILES) && $_FILES['file']['error'] == 0 ){
$pic = $_FILES['file'];
if(move_uploaded_file($pic['tmp_name'], $upload_dir.$pic['name'])){
exit_status(array('code'=>0,'msg'=>'上傳成功','url'=>$upload_dir.$pic['name']));
}
}
echo $_FILES['file']['error'];
exit_status(array('code'=>1,'msg'=>'出現(xiàn)了一些錯(cuò)誤'));
function exit_status($str){
echo json_encode($str);
exit;
}
?>
需要在服務(wù)器環(huán)境下運(yùn)行,我用的是wamp,上傳的文件會(huì)存到和php同級(jí)下的uploads文件夾中
可以使用<input type="file" />來(lái)實(shí)現(xiàn),然后通過(guò)css改變input的樣式就可以了