jQuery+ajax實現(xiàn)文件上傳功能
jQuery+ajax實現(xiàn)文件上傳功能(顯示文件上傳進度),供大家參考,具體內(nèi)容如下
具體實現(xiàn)步驟
1、定義UI結構,引入bootstrap的CSS文件和jQuery文件
2、給上傳按鈕綁定點擊事件
3、驗證是否選擇了文件
4、向FormData中追加文件
5、使用ajax發(fā)起上傳文件的請求
6、設置文件的路徑
7、使用xhr獲得文件上傳的進度
8、當文件上傳完成讓進度條顯示綠色
<style>
#loading {
width: 20px;
height: 20px;
}
#img {
display: block;
width: 200px;
height: 200px;
border-radius: 50%;
background-color: #abcdef;
opacity: .5;
}
</style>
<body>
<!--multiple可以選擇多個文件 -->
<input type="file" multiple name="" id="ipt" multiple><button id="btn" type="submit">上傳文件</button>
<img id="loading" src="../img/loading.gif" alt="" style="display: none;">
<!-- bootstrap中引入條件 -->
<div class="progress" style="margin-top: 10px;width: 100px;margin-left: 10px;">
<div id="progress" class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="45" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
0%
</div>
</div>
<!-- 顯示上傳到服務器的圖片 -->
<img src="" alt="" id="img" style="display: none;">
<script src="../lib/jquery-1.11.0.min.js"></script>
<script>
$(function() {
$('#btn').on('click', function() {
// 獲取文件列表
var file = $('#ipt')[0].files
// 判斷是否選擇了文件
if (file.length <= 0) {
return alert('請上傳文件')
}
// 創(chuàng)建formdata
var fd = new FormData()
// 向formdata中傳入數(shù)據(jù)
// fd.append()
// file是一個偽數(shù)組
fd.append('avatar', file[0])
// 用ajax傳送數(shù)據(jù)
$.ajax({
type: 'post',
url: 'http://www.liulongbin.top:3006/api/upload/avatar',
// 數(shù)據(jù)不需要編碼
contentType: false,
// 數(shù)據(jù)對象不需要轉(zhuǎn)換成鍵值對格式
processData: false,
data: fd,
beforeSend: function() {
$('#loading').show()
},
complete: function() {
$('#loading').hide()
},
success: function(res) {
// 判斷是否接收成功
if (res.status !== 200) {
return alert(reg.msg)
}
$('#img').attr('src', 'http://www.liulongbin.top:3006' + res['url']).css('display', 'block')
},
xhr: function xhr() {
var xhr = new XMLHttpRequest()
// 獲取文件上傳的進度
xhr.upload.onprogress = function(e) {
// e.lengthComputable表示當前的進度是否是可以計算,返回布爾值
if (e.lengthComputable) {
// e.loaded表示下載了多少數(shù)據(jù), e.total表示數(shù)據(jù)總量
var percentComplete = Math.ceil((e.loaded / e.total) * 100)
// 讓進度條的寬度變化
$('#progress').css('width', percentComplete)
// 在進度條中顯示百分比
$('#progress').html(percentComplete + 'px')
}
}
// 文件加載完成
xhr.upload.onload = function() {
$('#progress').removeClass('progress-bar progress-bar-striped').addClass('progress-bar progress-bar-success')
}
return xhr
}
})
})
})
</script>
</body>
效果演示(slow3g狀態(tài))


以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
jQuery實現(xiàn)的超酷蘋果風格圖標滑出菜單效果代碼
這篇文章主要介紹了jQuery實現(xiàn)的超酷蘋果風格圖標滑出菜單效果代碼,涉及jQuery基于鼠標hover事件動態(tài)操作頁面元素屬性的相關技巧,非常美觀實用,需要的朋友可以參考下2015-09-09
JQuery操作表格(隔行著色,高亮顯示,篩選數(shù)據(jù))
最近項目里對表格的操作比較多。以往我們要做一些效果的時候往往通過程序代碼來實現(xiàn),這個努力不值,因為JQuery是完全可以做到的,并且是客戶端運行,不經(jīng)過服務器處理,給用戶的反應快,也減少了服務器壓力2012-02-02
使用基于jquery的gamequery插件做JS乒乓球游戲
現(xiàn)在jquery比較流行,用js做游戲的也越來越多了,雖然現(xiàn)在html5出來了,但實際上要用html5做點啥出來還是得靠javascript,所以學好js是非常重要的2011-07-07
JQuery DataTable刪除行后的頁面更新利用Ajax解決
使用Jquery的DataTable進行數(shù)據(jù)表處理非常方便,常遇到的一個問題就是刪除一行后頁面必須進行更新,下面與大家分享下使用Ajax的解決方法2013-05-05
jQuery實現(xiàn)的超簡單輪播圖功能示例【代碼解釋】
這篇文章主要介紹了jQuery實現(xiàn)的超簡單輪播圖功能,結合完整實例形式分析了基于jQuery實現(xiàn)的輪播圖相關功能實現(xiàn)、樣式設置與注意事項,需要的朋友可以參考下2023-05-05

