Jquery結(jié)合HTML5實(shí)現(xiàn)文件上傳
1.利用Jquery使用HTML5的FormData屬性實(shí)現(xiàn)對(duì)文件的上傳
在HTML5以前我們?nèi)绻枰獙?shí)現(xiàn)文件上傳服務(wù)器等功能的時(shí)候,有時(shí)候我們不得不依賴于FLASH去實(shí)現(xiàn),而在HTML5到來(lái)之后,我們很容易的實(shí)現(xiàn)對(duì)文件的上傳,只需要利用HTML5的一個(gè)FormData屬性,結(jié)合Jquery就很容易實(shí)現(xiàn)文件的上傳,而且讀取文件的上傳進(jìn)度,下面這個(gè)上傳案例就是基于上面所說(shuō)的實(shí)現(xiàn)的,下面我將所所有的JS和CSS以及HTML頁(yè)面代碼放在下面。
注意事項(xiàng):FormData屬性必須依賴于HTML5,所以如果你按照本文代碼實(shí)現(xiàn)的功能,則瀏覽器必須升級(jí)為最新(支持HTML5 FormData屬性)。
2.HTML頁(yè)面代碼如下
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>使用HTML的FormData屬性實(shí)現(xiàn)文件上傳</title>
<link rel="stylesheet" href="../css/fileUpload.css" />
</head>
<body>
<table id="uploadTable" style="border: 1px;"></table>
<br/>
<a href="javascript:void(0);" class="input-file">
添加文件<input type="file" id="txtFile" style="width:200px;" />
</a>
<script type="text/javascript" src="../js/jquery-1.7.1-min.js"></script>
<script type="text/javascript">
$(function () {
$('#uploadTable').SalesMOUNDUpload({
saveUrl: '/Test/Save',
jqInput: $('#txtFile'),
fnRemove: removeFile,
fnComplete: function (d) {
window.console.log('complete ' + d);
}
});
});
function removeFile(d) {
$.post('/Test/Remove', { "filename": d }, function(r) {
});
}
</script>
</body>
</html>
3.CSS代碼如下:
/*源文件頭信息:
<copyright file="FileUpload.js">
Copyright(c)2014-2034 Kencery.All rights reserved.
個(gè)人博客:http://www.cnblogs.com/hanyinglong
創(chuàng)建人:韓迎龍(kencery)
創(chuàng)建時(shí)間:2015-6-24
</copyright>*/
body
{
font-family: "微軟雅黑";
font-size: 12px;
}
.input-file {
overflow: hidden;
position: relative;
}
.input-file input {
opacity: 0;
filter: alpha(opacity=0);
font-size: 100px;
position: absolute;
top: 0;
right: 0;
}
#uploadTable {
width: 500px;
border-collapse: collapse;
border: 1px solid Silver;
}
4.JS代碼如下:
// 源文件頭信息:
// <copyright file="FileUpload.js">
// Copyright(c)2014-2034 Kencery.All rights reserved.
// 創(chuàng)建人:韓迎龍(kencery)
// 創(chuàng)建時(shí)間:2015-6-24
// </copyright>
;
(function($) {
$.fn.SalesMOUNDUpload = function(options) {
var defaults =
{
saveUrl: '',
jqInput: '',
maxSize: 1024 * 1024 * 100, //100M
fnRemove: '', //移除文件 ,參數(shù):文件名
fnComplete: '' //每個(gè)文件成功 ,參數(shù):服務(wù)器端返回內(nèi)容
};
var opt = $.extend(defaults, options);
function getByteToM(val) {
if (isNaN(val)) return val;
val = val / (1024 * 1024);
val = Math.round(val * 100) / 100;
return val;
}
return this.each(function() {
var $this = $(this);
$this.empty();
if (typeof FormData == 'undefine') {
alert('瀏覽器版本太低,不支持改上傳!');
return;
}
//表頭
if ($this.find('thead').length == 0) {
var $thead = $('<thead>');
var $th_tr = $('<tr>');
$th_tr.append('<th>文件名</th>');
$th_tr.append('<th>類型</th>');
$th_tr.append('<th>大小</th>');
$th_tr.append('<th>狀態(tài)</th>');
$th_tr.append('<th>操作</th>');
$th_tr.appendTo($thead);
$this.append($thead);
}
opt.jqInput[0].addEventListener('change', function(e) {
var file = this.files[0];
if (!file) {
return;
}
if (file.size > opt.maxSize) {
window.alert('文件超過(guò)最大');
return;
}
var fd = new FormData();
var $table = $this;
fd.append("uploadFile", file);
var xhr = new XMLHttpRequest();
xhr.open('POST', opt.saveUrl, true);
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
//表中內(nèi)容
var $tr = $('<tr>');
$tr.append('<td class="upload_name">' + file.name + '</td>');
$tr.append('<td class="upload_type">' + file.type + '</td>');
$tr.append('<td class="upload_size">' + getByteToM(file.size) + 'M' + '</td>');
$tr.append('<td class="upload_status">' + 0 + '</td>');
$tr.append('<td class="upload_action"><a href="javascript:void(0);">' + '取消' + '</a></td>');
$tr.find('.upload_action a').unbind('click').bind('click', function() {
xhr.abort();
});
$table.append($tr);
function uploadProgress(evt) {
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded * 100 / evt.total);
$tr.find('.upload_status').html(Math.round(percentComplete) + '%');
} else {
$tr.find('.upload_status').html('unable to compute');
}
}
function uploadComplete(evt) {
if (evt.target.status == 200) {
$tr.find('.upload_status').html('已完成');
$tr.find('.upload_action a').html('刪除');
if (typeof opt.fnComplete == 'function') {
opt.fnComplete(evt.target.response);
}
$tr.find('.upload_action').unbind('click').bind('click', removeFile);
}
}
function uploadFailed() {
$tr.find('.upload_status').html('<a href="javascript:void(0);">×</a>');
$tr.find('.upload_status a').unbind('click').bind('click', function() {
$tr.remove();
});
$tr.find('.upload_action a').html('重試');
$tr.find('.upload_action a').unbind('click').bind('click', function() {
xhr.send(fd);
});
}
function uploadCanceled() {
$tr.remove();
}
function removeFile() {
$tr.remove();
if (typeof opt.fnRemove == 'function') {
opt.fnRemove(file.name);
}
}
xhr.send(fd);
}, false);
});
};
}(jQuery));
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
- 使用PHP和HTML5 FormData實(shí)現(xiàn)無(wú)刷新文件上傳教程
- 基于HTML5 Ajax文件上傳進(jìn)度條如何實(shí)現(xiàn)(jquery版本)
- php+html5實(shí)現(xiàn)無(wú)刷新圖片上傳教程
- javascript html5移動(dòng)端輕松實(shí)現(xiàn)文件上傳
- 基于javascript html5實(shí)現(xiàn)多文件上傳
- IOS中html5上傳圖片方向問(wèn)題解決方法
- 用Html5與Asp.net MVC上傳多個(gè)文件的實(shí)現(xiàn)代碼
- Nodejs+express+html5 實(shí)現(xiàn)拖拽上傳
- jQuery+HTML5實(shí)現(xiàn)圖片上傳前預(yù)覽效果
- HTML5+Canvas調(diào)用手機(jī)拍照功能實(shí)現(xiàn)圖片上傳(下)
相關(guān)文章
jQuery+CSS實(shí)現(xiàn)簡(jiǎn)單切換菜單示例
這篇文章主要介紹了jQuery+CSS實(shí)現(xiàn)簡(jiǎn)單切換菜單的方法,涉及jQuery針對(duì)頁(yè)面元素的遍歷及樣式動(dòng)態(tài)變換相關(guān)技巧,需要的朋友可以參考下2016-07-07
jquery 簡(jiǎn)單圖片導(dǎo)航插件jquery.imgNav.js
前幾天某MM要偶幫忙實(shí)現(xiàn)栗子汀首頁(yè)的圖片導(dǎo)航效果,很簡(jiǎn)單而且具有通用性的一個(gè)需求,點(diǎn)圖片A切換圖片A相關(guān)的內(nèi)容,點(diǎn)圖片B切換圖片B相關(guān)的內(nèi)容,僅此而已。2010-03-03
為jQuery-easyui的tab組件添加右鍵菜單功能的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇為jQuery-easyui的tab組件添加右鍵菜單功能的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
JQuery實(shí)現(xiàn)表格數(shù)據(jù)行上移與下移
這篇文章主要為大家詳細(xì)介紹了JQuery實(shí)現(xiàn)表格數(shù)據(jù)行上移與下移,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
jQuery ajax 跨域插件jquery.xdomainrequest.min.js的使用方法
jQuery XDomainRequest 是一個(gè)利用 XDomainRequest 對(duì)象為 IE8、IE9 實(shí)現(xiàn)跨域資源共享(CORS - Cross Origin Resource Sharing)的 jQuery 插件2023-06-06
jQuery之浮動(dòng)窗口實(shí)現(xiàn)代碼(兩種方法)
今天公司要求實(shí)現(xiàn)浮動(dòng)窗口效果,自己看了不少資料終于實(shí)現(xiàn)此效果。用jQ實(shí)現(xiàn)浮動(dòng)窗口功能,彈出窗口時(shí)背景變暗.2010-09-09
基于jQuery實(shí)現(xiàn)的旋轉(zhuǎn)彩圈實(shí)例
這篇文章主要介紹了基于jQuery實(shí)現(xiàn)的旋轉(zhuǎn)彩圈,涉及jQuery定時(shí)操作頁(yè)面元素的相關(guān)技巧,需要的朋友可以參考下2015-06-06
jquery1.4后 jqDrag 拖動(dòng) 不可用
jquery 升級(jí)到1.4后 jqDrag 拖動(dòng) 不可用的修改方法2010-02-02
Jquery操作radio,checkbox,select表單操作實(shí)現(xiàn)代碼
Jquery操作radio,checkbox,select表單操作實(shí)現(xiàn)代碼,需要用jquery操作表單的朋友可以參考下。2010-04-04

