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ì)多種類(lèi)型的文件提供文件預(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)化,為開(kāi)發(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)單的界面效果和眾多上傳文件控件一樣,可以接受各種類(lèi)型的文件。當(dāng)然,我們也可以指定具體接受的文件類(lèi)型等功能。

如果需要考慮中文化,那么還需要引入文件:
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的代碼處理客戶(hù)端上傳的事件,同時(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);//使用寫(xiě)入的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);//使用寫(xiě)入的ID進(jìn)行更新
$('#file-Portrait').fileinput('upload');
第一行代碼就是重新構(gòu)建上傳的附加內(nèi)容,如用戶(hù)的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>
/// 上傳用戶(hù)頭像圖片
/// </summary>
/// <param name="id">用戶(hù)的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)建了上面的用戶(hù)肖像的保存處理邏輯了,文件可以正常的保存到后臺(tái)的文件系統(tǒng)里面,同時(shí)數(shù)據(jù)庫(kù)里面記錄一些必備的信息。
當(dāng)然,除了用來(lái)處理用戶(hù)的肖像圖片,我們也可以用來(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è)精彩的專(zhuān)題: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)文章
Javascript通過(guò)控制類(lèi)名更改樣式
這篇文章主要介紹了Javascript通過(guò)控制類(lèi)名更改樣式,下面來(lái)和小編一起來(lái)學(xué)習(xí)吧2019-05-05
《JavaScript高級(jí)程序設(shè)計(jì)》閱讀筆記(三) ECMAScript中的引用類(lèi)型
ECMAScript中的引用類(lèi)型,主要包括Object類(lèi)、Boolean類(lèi)、Number類(lèi)、String類(lèi)、instanceof運(yùn)算符2012-02-02
JavaScript 申明函數(shù)的三種方法 每個(gè)函數(shù)就是一個(gè)對(duì)象(一)
JavaScript 申明函數(shù)的三種方法 每個(gè)函數(shù)就是一個(gè)對(duì)象(一)2009-12-12
Javascript實(shí)現(xiàn)滑塊滑動(dòng)改變值的實(shí)現(xiàn)代碼
一個(gè)關(guān)于稅務(wù)的功能,值得一說(shuō)的是本頁(yè)面的滑塊實(shí)現(xiàn)由于對(duì)美工不是很熟悉所以上圖了,感興趣的朋友可以了解下哈2013-04-04
uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能實(shí)例
數(shù)據(jù)列表在很多時(shí)候,經(jīng)常會(huì)用到,下面這篇文章主要給大家介紹了關(guān)于uni-app實(shí)現(xiàn)數(shù)據(jù)上拉加載更多功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
JS如何實(shí)現(xiàn)封裝列表右滑動(dòng)刪除收藏按鈕
這篇文章主要介紹了JS如何實(shí)現(xiàn)封裝列表右滑動(dòng)刪除收藏按鈕,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
bootstrap實(shí)現(xiàn)點(diǎn)擊刪除按鈕彈出確認(rèn)框的實(shí)例代碼
本文通過(guò)實(shí)例代碼給大家介紹了bootstrap實(shí)現(xiàn)點(diǎn)擊刪除按鈕彈出確認(rèn)框的方法,需要的朋友參考下吧2018-08-08

