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到來之后,我們很容易的實(shí)現(xiàn)對(duì)文件的上傳,只需要利用HTML5的一個(gè)FormData屬性,結(jié)合Jquery就很容易實(shí)現(xiàn)文件的上傳,而且讀取文件的上傳進(jìn)度,下面這個(gè)上傳案例就是基于上面所說的實(shí)現(xiàn)的,下面我將所所有的JS和CSS以及HTML頁面代碼放在下面。
注意事項(xiàng):FormData屬性必須依賴于HTML5,所以如果你按照本文代碼實(shí)現(xiàn)的功能,則瀏覽器必須升級(jí)為最新(支持HTML5 FormData屬性)。
2.HTML頁面代碼如下
<!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('文件超過最大'); 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));
以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。
- 使用PHP和HTML5 FormData實(shí)現(xiàn)無刷新文件上傳教程
- 基于HTML5 Ajax文件上傳進(jìn)度條如何實(shí)現(xiàn)(jquery版本)
- php+html5實(shí)現(xiàn)無刷新圖片上傳教程
- javascript html5移動(dòng)端輕松實(shí)現(xiàn)文件上傳
- 基于javascript html5實(shí)現(xiàn)多文件上傳
- IOS中html5上傳圖片方向問題解決方法
- 用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 struts 驗(yàn)證唯一標(biāo)識(shí)(公用方法)
本教程將為大家詳細(xì)介紹下使用公用方法驗(yàn)證jquery struts唯一標(biāo)識(shí),感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03JQuery的AJAX實(shí)現(xiàn)文件下載的小例子
JQuery的ajax函數(shù)的返回類型只有xml、text、json、html等類型,沒有“流”類型,所以我們要實(shí)現(xiàn)ajax下載,不能夠使用相應(yīng)的ajax函數(shù)進(jìn)行文件下載。但可以用js生成一個(gè)form,用這個(gè)form提交參數(shù),并返回“流”類型的數(shù)據(jù)。在實(shí)現(xiàn)過程中,頁面也沒有進(jìn)行刷新2013-05-05jQuery實(shí)現(xiàn)列表自動(dòng)滾動(dòng)循環(huán)滾動(dòng)展示新聞
jQuery實(shí)現(xiàn)列表自動(dòng)滾動(dòng)循環(huán)滾動(dòng)展示新聞,鼠標(biāo)懸停時(shí)停止?jié)L動(dòng)并提示,離開后,繼續(xù)滾動(dòng),實(shí)現(xiàn)的代碼如下,需要的朋友可以看看2014-08-08jQuery simplePage+AJAX plus分頁插件用法實(shí)例
這篇文章主要介紹了jQuery simplePage+AJAX plus分頁插件用法,結(jié)合實(shí)例形式分析了jQuery基于extend擴(kuò)展實(shí)現(xiàn)分頁插件的具體技巧,需要的朋友可以參考下2016-02-02jquery通過select列表選擇框?qū)Ρ砀駭?shù)據(jù)進(jìn)行過濾示例
這篇文章主要介紹了jquery通過select列表選擇框?qū)Ρ砀駭?shù)據(jù)進(jìn)行過濾示例,需要的朋友可以參考下2014-05-05ASP.NET jQuery 實(shí)例9 通過控件hyperlink實(shí)現(xiàn)返回頂部效果
ASP.NET jQuery 實(shí)例9 通過控件hyperlink實(shí)現(xiàn)返回頂部效果的實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-02-02jQuery Validate 相關(guān)參數(shù)及常用的自定義驗(yàn)證規(guī)則
這篇文章主要介紹了jQuery Validate 相關(guān)參數(shù)及常用的自定義驗(yàn)證規(guī)則,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03jquery實(shí)現(xiàn)input輸入框?qū)崟r(shí)輸入觸發(fā)事件代碼
如何實(shí)現(xiàn)input輸入框?qū)崟r(shí)輸入觸發(fā)事件,下面有個(gè)不不錯(cuò)的示例使用jquery實(shí)現(xiàn)的,感興趣的朋友可以參考下2014-01-01jQuery中;function($,undefined) 前面的分號(hào)的用處
這篇文章主要介紹了jQuery中;function($,undefined) 前面的分號(hào)的用處,需要的朋友可以參考下2014-12-12jquery實(shí)現(xiàn)適用于門戶站的導(dǎo)航下拉菜單效果代碼
這篇文章主要介紹了jquery實(shí)現(xiàn)適用于門戶站的導(dǎo)航下拉菜單效果代碼,可實(shí)現(xiàn)鼠標(biāo)滑過菜單項(xiàng)實(shí)現(xiàn)下拉列表顯示效果的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-08-08