JS文件上傳神器bootstrap fileinput詳解
Bootstrap FileInput插件功能如此強(qiáng)大,完全沒有理由不去使用,但是國內(nèi)很少能找到本插件完整的使用方法,于是本人去其官網(wǎng)翻譯了一下英文說明文檔放在這里供英文不好的同學(xué)勉強(qiáng)查閱。另外附上一段調(diào)用方發(fā)和servlet端的接收代碼,未完待續(xù)。
引言:
一個強(qiáng)化的HTML5 文件輸入插件,適用于Bootstrap 3.x。本插件對多種類型的文件提供文件預(yù)覽,并且提供了多選等功能。本插件還提供給你一個簡單的方式去安裝一個先進(jìn)的文件選擇/上傳控制版本去配合Bootstrap CSS3樣式。通過對很多種文件提供預(yù)覽支持,比如圖片,文本,html,視頻,聲音,flash和對象,它大大增強(qiáng)了文件輸入的功能。另外,它還包含基于AJAX的上傳,拖拽,移除文件的功能,可視化的上傳進(jìn)度條,和可選擇的添加或刪除文件預(yù)覽功能。
提示:本插件致力于使用大量在添加jquery下的css3和html5功能,強(qiáng)調(diào):你可能會發(fā)現(xiàn)css3或html5或它兩個的混合在許多實(shí)現(xiàn)中被需要。
本插件最早受一篇博文和Jasny'sFile Input plugin啟發(fā)。但是本插件現(xiàn)在已經(jīng)添加的好多功能和強(qiáng)化,為開發(fā)者提供了一個成熟并且完整的文件管理工具和解決方案。
伴隨著4.0.0版本的發(fā)布,本插件現(xiàn)在支持被多種現(xiàn)代化瀏覽器支持的,基于Ajax,利用html5 Formdata和XHR2協(xié)議的上傳。而且她也擁有了對在服務(wù)器端基于AJAX的文件刪除原生內(nèi)置支持。因此它可以添加更加強(qiáng)大的功能,聯(lián)機(jī)添加、移除文件。本插件也對大多數(shù)現(xiàn)代瀏覽器添加了拖拉,移除支持。它也已經(jīng)為Ajax上傳提供原生支持。萬一,瀏覽器不支持FormData或XHR2,本插件會降級成一個普通表單。
文件上傳插件File Input介紹
一般情況下,我們需要引入下面兩個文件,插件才能正常使用:
bootstrap-fileinput/css/fileinput.min.css
bootstrap-fileinput/js/fileinput.min.js
簡單的界面效果和眾多上傳文件控件一樣,可以接受各種類型的文件。當(dāng)然,我們也可以指定具體接受的文件類型等功能。
如果需要考慮中文化,那么還需要引入文件:
bootstrap-fileinput/js/fileinput_locale_zh.js
這樣基于MVC的Bundles集合,我們把它們所需要的文件加入到集合里面即可。
//添加對bootstrap-fileinput控件的支持 css_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/css/fileinput.min.css"); js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/fileinput.min.js"); js_metronic.Include("~/Content/MyPlugins/bootstrap-fileinput/js/fileinput_locale_zh.js");
這樣我們在頁面里面,就可以呈現(xiàn)出中文的界面說明和提示了
文件上傳插件File Input的使用
一般情況下,我們可以定義一個JS的通用函數(shù),用來初始化這個插件控件的,如下JS的函數(shù)代碼所示。
//初始化fileinput控件(第一次初始化) function initFileInput(ctrlName, uploadUrl) { var control = $('#' + ctrlName); control.fileinput({ language: 'zh', //設(shè)置語言 uploadUrl: uploadUrl, //上傳的地址 allowedFileExtensions : ['jpg', 'png','gif'],//接收的文件后綴 showUpload: false, //是否顯示上傳按鈕 showCaption: false,//是否顯示標(biāo)題 browseClass: "btn btn-primary", //按鈕樣式 previewFileIcon: "<i class='glyphicon glyphicon-king'></i>", }); }
頁面代碼里面,我們放置一個文件上傳控件,如下代碼所示。
<div class="row" style="height: 500px"> <input id="file-Portrait1" type="file"> </div>
這樣我們腳本代碼的初始化代碼如下:
//初始化fileinput控件(第一次初始化) initFileInput("file-Portrait", "/User/EditPortrait");
這樣就完成了控件的初始化了,如果我們需要上傳文件,那么還需要JS的代碼處理客戶端上傳的事件,同時也需要MVC后臺控制器處理文件的保存操作。
例如我對窗體數(shù)據(jù)的保存處理代碼如下所示。
//添加記錄的窗體處理 formValidate("ffAdd", function (form) { $("#add").modal("hide"); //構(gòu)造參數(shù)發(fā)送給后臺 var postData = $("#ffAdd").serializeArray(); $.post(url, postData, function (json) { var data = $.parseJSON(json); if (data.Success) { //增加肖像的上傳處理 initPortrait(data.Data1);//使用寫入的ID進(jìn)行更新 $('#file-Portrait').fileinput('upload'); //保存成功 1.關(guān)閉彈出層,2.刷新表格數(shù)據(jù) showTips("保存成功"); Refresh(); } else { showError("保存失敗:" + data.ErrorMessage, 3000); } }).error(function () { showTips("您未被授權(quán)使用該功能,請聯(lián)系管理員進(jìn)行處理。"); }); });
其中我們注意到文件保存的處理邏輯代碼部分:
//增加肖像的上傳處理 initPortrait(data.Data1);//使用寫入的ID進(jìn)行更新 $('#file-Portrait').fileinput('upload');
第一行代碼就是重新構(gòu)建上傳的附加內(nèi)容,如用戶的ID信息等,這樣我們就可以根據(jù)這些ID來構(gòu)建一些額外的數(shù)據(jù)給后臺上傳處理了。
這個函數(shù)主要就是重新給ID賦值,方便上傳的時候,獲取最新的附加參數(shù),這個和Uploadify的處理模式一樣的。
//初始化圖像信息 function initPortrait(ctrlName, id) { var control = $('#' + ctrlName); var imageurl = '/PictureAlbum/GetPortrait?id=' + id + '&r=' + Math.random(); //重要,需要更新控件的附加參數(shù)內(nèi)容,以及圖片初始化顯示 control.fileinput('refresh', { uploadExtraData: { id: id }, initialPreview: [ //預(yù)覽圖片的設(shè)置 "<img src='" + imageurl + "' class='file-preview-image' alt='肖像圖片' title='肖像圖片'>", ], }); }
前面我們看到,我上傳的地址為:"/User/EditPortrait",這個后臺的函數(shù)我也公布一下,希望給大家一個完整的案例代碼學(xué)習(xí)。
/// <summary> /// 上傳用戶頭像圖片 /// </summary> /// <param name="id">用戶的ID</param> /// <returns></returns> public ActionResult EditPortrait(int id) { CommonResult result = new CommonResult(); try { var files = Request.Files; if (files != null && files.Count > 0) { UserInfo info = BLLFactory<User>.Instance.FindByID(id); if (info != null) { var fileData = ReadFileBytes(files[0]); result.Success = BLLFactory<User>.Instance.UpdatePersonImageBytes(UserImageType.個人肖像, id, fileData); } } } catch (Exception ex) { result.ErrorMessage = ex.Message; } return ToJsonContent(result); }
這樣我們就構(gòu)建了上面的用戶肖像的保存處理邏輯了,文件可以正常的保存到后臺的文件系統(tǒng)里面,同時數(shù)據(jù)庫里面記錄一些必備的信息。
當(dāng)然,除了用來處理用戶的肖像圖片,我們也可以用來構(gòu)建圖片相冊的處理操作的。
//初始化fileinput控件(第一次初始化) $('#file-Portrait').fileinput({ language: 'zh', //設(shè)置語言 uploadUrl: "/FileUpload/Upload", //上傳的地址 allowedFileExtensions : ['jpg', 'png','gif'],//接收的文件后綴, maxFileCount: 100, enctype: 'multipart/form-data', showUpload: true, //是否顯示上傳按鈕 showCaption: false,//是否顯示標(biāo)題 browseClass: "btn btn-primary", //按鈕樣式 previewFileIcon: "<i class='glyphicon glyphicon-king'></i>", msgFilesTooMany: "選擇上傳的文件數(shù)量({n}) 超過允許的最大數(shù)值{m}!", });
源碼下載:Bootstrap FileInput文件上傳組件
本文已被整理到了《javascript文件上傳操作匯總》,《ajax上傳技術(shù)匯總》歡迎大家學(xué)習(xí)閱讀。
如果大家還想深入學(xué)習(xí),可以點(diǎn)擊這里進(jìn)行學(xué)習(xí),再為大家附兩個精彩的專題:Bootstrap學(xué)習(xí)教程 Bootstrap實(shí)戰(zhàn)教程
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js 實(shí)現(xiàn) input type="file" 文件上傳示例代碼
- 原生JS實(shí)現(xiàn)前端本地文件上傳
- 原生JS和jQuery版實(shí)現(xiàn)文件上傳功能
- 學(xué)習(xí)使用AngularJS文件上傳控件
- JS簡單實(shí)現(xiàn)文件上傳實(shí)例代碼(無需插件)
- ajaxFileUpload.js插件支持多文件上傳的方法
- 分享5個好用的javascript文件上傳插件
- SpringBoot+Vue.js實(shí)現(xiàn)前后端分離的文件上傳功能
- 基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能
- 原生JS實(shí)現(xiàn)文件上傳
相關(guān)文章
《JavaScript高級程序設(shè)計(jì)》閱讀筆記(三) ECMAScript中的引用類型
ECMAScript中的引用類型,主要包括Object類、Boolean類、Number類、String類、instanceof運(yùn)算符2012-02-02JavaScript 申明函數(shù)的三種方法 每個函數(shù)就是一個對象(一)
JavaScript 申明函數(shù)的三種方法 每個函數(shù)就是一個對象(一)2009-12-12Javascript實(shí)現(xiàn)滑塊滑動改變值的實(shí)現(xiàn)代碼
一個關(guān)于稅務(wù)的功能,值得一說的是本頁面的滑塊實(shí)現(xiàn)由于對美工不是很熟悉所以上圖了,感興趣的朋友可以了解下哈2013-04-04uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能實(shí)例
數(shù)據(jù)列表在很多時候,經(jīng)常會用到,下面這篇文章主要給大家介紹了關(guān)于uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08JS如何實(shí)現(xiàn)封裝列表右滑動刪除收藏按鈕
這篇文章主要介紹了JS如何實(shí)現(xiàn)封裝列表右滑動刪除收藏按鈕,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07bootstrap實(shí)現(xiàn)點(diǎn)擊刪除按鈕彈出確認(rèn)框的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了bootstrap實(shí)現(xiàn)點(diǎn)擊刪除按鈕彈出確認(rèn)框的方法,需要的朋友參考下吧2018-08-08