JS文件上傳神器bootstrap fileinput詳解
Bootstrap FileInput插件功能如此強(qiáng)大,完全沒(méi)有理由不去使用,但是國(guó)內(nèi)很少能找到本插件完整的使用方法,于是本人去其官網(wǎng)翻譯了一下英文說(shuō)明文檔放在這里供英文不好的同學(xué)勉強(qiáng)查閱。另外附上一段調(diào)用方發(fā)和servlet端的接收代碼,未完待續(xù)。

引言:
一個(gè)強(qiáng)化的HTML5 文件輸入插件,適用于Bootstrap 3.x。本插件對(duì)多種類型的文件提供文件預(yù)覽,并且提供了多選等功能。本插件還提供給你一個(gè)簡(jiǎn)單的方式去安裝一個(gè)先進(jìn)的文件選擇/上傳控制版本去配合Bootstrap CSS3樣式。通過(guò)對(duì)很多種文件提供預(yù)覽支持,比如圖片,文本,html,視頻,聲音,flash和對(duì)象,它大大增強(qiáng)了文件輸入的功能。另外,它還包含基于AJAX的上傳,拖拽,移除文件的功能,可視化的上傳進(jìn)度條,和可選擇的添加或刪除文件預(yù)覽功能。
提示:本插件致力于使用大量在添加jquery下的css3和html5功能,強(qiáng)調(diào):你可能會(huì)發(fā)現(xiàn)css3或html5或它兩個(gè)的混合在許多實(shí)現(xiàn)中被需要。
本插件最早受一篇博文和Jasny'sFile Input plugin啟發(fā)。但是本插件現(xiàn)在已經(jīng)添加的好多功能和強(qiáng)化,為開發(fā)者提供了一個(gè)成熟并且完整的文件管理工具和解決方案。
伴隨著4.0.0版本的發(fā)布,本插件現(xiàn)在支持被多種現(xiàn)代化瀏覽器支持的,基于Ajax,利用html5 Formdata和XHR2協(xié)議的上傳。而且她也擁有了對(duì)在服務(wù)器端基于AJAX的文件刪除原生內(nèi)置支持。因此它可以添加更加強(qiáng)大的功能,聯(lián)機(jī)添加、移除文件。本插件也對(duì)大多數(shù)現(xiàn)代瀏覽器添加了拖拉,移除支持。它也已經(jīng)為Ajax上傳提供原生支持。萬(wàn)一,瀏覽器不支持FormData或XHR2,本插件會(huì)降級(jí)成一個(gè)普通表單。
文件上傳插件File Input介紹
一般情況下,我們需要引入下面兩個(gè)文件,插件才能正常使用:
bootstrap-fileinput/css/fileinput.min.css
bootstrap-fileinput/js/fileinput.min.js
簡(jiǎn)單的界面效果和眾多上傳文件控件一樣,可以接受各種類型的文件。當(dāng)然,我們也可以指定具體接受的文件類型等功能。

如果需要考慮中文化,那么還需要引入文件:
bootstrap-fileinput/js/fileinput_locale_zh.js
這樣基于MVC的Bundles集合,我們把它們所需要的文件加入到集合里面即可。
//添加對(duì)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");
這樣我們?cè)陧?yè)面里面,就可以呈現(xiàn)出中文的界面說(shuō)明和提示了

文件上傳插件File Input的使用
一般情況下,我們可以定義一個(gè)JS的通用函數(shù),用來(lái)初始化這個(gè)插件控件的,如下JS的函數(shù)代碼所示。
//初始化fileinput控件(第一次初始化)
function initFileInput(ctrlName, uploadUrl) {
var control = $('#' + ctrlName);
control.fileinput({
language: 'zh', //設(shè)置語(yǔ)言
uploadUrl: uploadUrl, //上傳的地址
allowedFileExtensions : ['jpg', 'png','gif'],//接收的文件后綴
showUpload: false, //是否顯示上傳按鈕
showCaption: false,//是否顯示標(biāo)題
browseClass: "btn btn-primary", //按鈕樣式
previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
});
}
頁(yè)面代碼里面,我們放置一個(gè)文件上傳控件,如下代碼所示。
<div class="row" style="height: 500px"> <input id="file-Portrait1" type="file"> </div>
這樣我們腳本代碼的初始化代碼如下:
//初始化fileinput控件(第一次初始化)
initFileInput("file-Portrait", "/User/EditPortrait");
這樣就完成了控件的初始化了,如果我們需要上傳文件,那么還需要JS的代碼處理客戶端上傳的事件,同時(shí)也需要MVC后臺(tái)控制器處理文件的保存操作。
例如我對(duì)窗體數(shù)據(jù)的保存處理代碼如下所示。
//添加記錄的窗體處理
formValidate("ffAdd", function (form) {
$("#add").modal("hide");
//構(gòu)造參數(shù)發(fā)送給后臺(tái)
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)使用該功能,請(qǐng)聯(lián)系管理員進(jìn)行處理。");
});
});
其中我們注意到文件保存的處理邏輯代碼部分:
//增加肖像的上傳處理
initPortrait(data.Data1);//使用寫入的ID進(jìn)行更新
$('#file-Portrait').fileinput('upload');
第一行代碼就是重新構(gòu)建上傳的附加內(nèi)容,如用戶的ID信息等,這樣我們就可以根據(jù)這些ID來(lái)構(gòu)建一些額外的數(shù)據(jù)給后臺(tái)上傳處理了。
這個(gè)函數(shù)主要就是重新給ID賦值,方便上傳的時(shí)候,獲取最新的附加參數(shù),這個(gè)和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",這個(gè)后臺(tái)的函數(shù)我也公布一下,希望給大家一個(gè)完整的案例代碼學(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.個(gè)人肖像, id, fileData);
}
}
}
catch (Exception ex)
{
result.ErrorMessage = ex.Message;
}
return ToJsonContent(result);
}
這樣我們就構(gòu)建了上面的用戶肖像的保存處理邏輯了,文件可以正常的保存到后臺(tái)的文件系統(tǒng)里面,同時(shí)數(shù)據(jù)庫(kù)里面記錄一些必備的信息。
當(dāng)然,除了用來(lái)處理用戶的肖像圖片,我們也可以用來(lái)構(gòu)建圖片相冊(cè)的處理操作的。
//初始化fileinput控件(第一次初始化)
$('#file-Portrait').fileinput({
language: 'zh', //設(shè)置語(yǔ)言
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}) 超過(guò)允許的最大數(shù)值{m}!",
});
源碼下載:Bootstrap FileInput文件上傳組件
本文已被整理到了《javascript文件上傳操作匯總》,《ajax上傳技術(shù)匯總》歡迎大家學(xué)習(xí)閱讀。
如果大家還想深入學(xué)習(xí),可以點(diǎn)擊這里進(jìn)行學(xué)習(xí),再為大家附兩個(gè)精彩的專題:Bootstrap學(xué)習(xí)教程 Bootstrap實(shí)戰(zhàn)教程
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js 實(shí)現(xiàn) input type="file" 文件上傳示例代碼
- 原生JS實(shí)現(xiàn)前端本地文件上傳
- 原生JS和jQuery版實(shí)現(xiàn)文件上傳功能
- 學(xué)習(xí)使用AngularJS文件上傳控件
- JS簡(jiǎn)單實(shí)現(xiàn)文件上傳實(shí)例代碼(無(wú)需插件)
- ajaxFileUpload.js插件支持多文件上傳的方法
- 分享5個(gè)好用的javascript文件上傳插件
- SpringBoot+Vue.js實(shí)現(xiàn)前后端分離的文件上傳功能
- 基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能
- 原生JS實(shí)現(xiàn)文件上傳
相關(guān)文章
微信小程序scroll-view隱藏滾動(dòng)條的方法詳解
這篇文章主要介紹了微信小程序scroll-view隱藏滾動(dòng)條的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
javascript function、指針及內(nèi)置對(duì)象
該文摘自于匿名教程總結(jié),希望對(duì)初學(xué)js的同學(xué)有幫助,因?yàn)樗鉀Q了我學(xué)習(xí)js的眾多迷惑。。。2009-02-02
微信小程序自定義單選框樣式實(shí)現(xiàn)單選功能
這篇文章主要為大家詳細(xì)介紹了微信小程序自定義單選框樣式實(shí)現(xiàn)單選功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
js arguments.callee的應(yīng)用代碼
arguments.callee的使用方法,具體大家自己測(cè)試了2009-05-05
JS面試必備之手寫instanceof,深拷貝,節(jié)流和防抖
JavaScript如何實(shí)現(xiàn)手寫instanceof、深拷貝、節(jié)流、防抖也是面試時(shí)常常考到的知識(shí)點(diǎn),這篇文章為大家進(jìn)行了詳細(xì)介紹,需要的可以參考一下2023-05-05
JavaScript實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01
在網(wǎng)頁(yè)中使用document.write時(shí)遭遇的奇怪問(wèn)題
很多時(shí)候我們都會(huì)在網(wǎng)頁(yè)上的JavaScript中使用document.write來(lái)寫入一些東西,有的時(shí)候可能因?yàn)槲覀儫o(wú)法改變某一部分HTML而不得不使用這樣的辦法,也有的時(shí)候是因?yàn)樵谶M(jìn)行跨應(yīng)用的腳本調(diào)用。2010-08-08
基于Bootstrap 3 JQuery及RegExp的表單驗(yàn)證功能
這篇文章主要介紹了基于Bootstrap 3 JQuery及RegExp的表單驗(yàn)證功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02

