首頁 > web前端 > js教程 > JS檔案上傳神器bootstrap fileinput的解析

JS檔案上傳神器bootstrap fileinput的解析

不言
發布: 2018-06-25 17:40:47
原創
2369 人瀏覽過

這篇文章主要介紹了JS檔案上傳神器Bootstrap FileInput,樣式非常美觀,並且支援上傳檔案預覽,ajax同步或非同步上傳,拖曳文件上傳等酷炫的功能,具有一定的參考價值,感興趣的小夥伴們可以參考一下

Bootstrap FileInput插件功能如此強大,完全沒有理由不去使用,但是國內很少能找到本插件完整的使用方法,於是本人去其官網翻譯了一下英文說明文檔放在這裡供英文不好的同學勉強查閱。另外附上一段調用方發和servlet端的接收代碼,未完待續。

引言:

一個強化的HTML5 檔案輸入插件,適用於Bootstrap 3.x。本插件對多種類型的文件提供文件預覽,並提供了多選等功能。此插件也提供給你一個簡單的方式去安裝一個先進的文件選擇/上傳控製版本去配合Bootstrap CSS3樣式。透過對許多文件提供預覽支持,例如圖片,文本,html,視頻,聲音,flash和對象,它大大增強了文件輸入的功能。另外,它還包含基於AJAX的上傳,拖曳,移除檔案的功能,可視化的上傳進度條,和可選擇的新增或刪除檔案預覽功能。

提示:本插件致力於使用大量在添加jquery下的css3和html5功能,強調:你可能會發現css3或html5或它兩個的混合在許多實作中被需要。

本插件最早受一篇部落格文章和Jasny'sFile Input plugin啟發。但本插件現在已經添加的許多功能和強化,為開發者提供了一個成熟且完整的文件管理工具和解決方案。

伴隨著4.0.0版本的發布,本外掛程式現在支援被多種現代化瀏覽器支援的,基於Ajax,利用html5 Formdata和XHR2協定的上傳。而且她也擁有了對在伺服器端基於AJAX的檔案刪除原生內建支援。因此它可以添加更強大的功能,線上新增、移除檔案。本插件也對大多數現代瀏覽器添加了拖拉,移除支援。它也已經為Ajax上傳提供原生支援。萬一,瀏覽器不支援FormData或XHR2,本插件會降級成一個普通表單。

檔案上傳外掛File Input介紹

一般情況下,我們需要引入下面兩個文件,外掛程式才能正常使用:

# bootstrap-fileinput/css/fileinput.min.css
bootstrap-fileinput/js/fileinput.min.js

簡單的介面效果和眾多上傳檔案控制項一樣,可以接受各種類型的文件。當然,我們也可以指定具體接受的文件類型等功能。

如果需要考慮中文化,那麼還需要引入檔案:

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");
登入後複製

這樣我們在頁面裡面,就可以呈現出中文的介面說明和提示了

檔案上傳外掛File Input的使用

一般情況下,我們可以定義一個JS的通用函數,用來初始化這個外掛控制項的,如下JS的函數程式碼所示。

//初始化fileinput控件(第一次初始化)
function initFileInput(ctrlName, uploadUrl) { 
 var control = $('#' + ctrlName); 
 control.fileinput({
 language: 'zh', //设置语言
 uploadUrl: uploadUrl, //上传的地址
 allowedFileExtensions : ['jpg', 'png','gif'],//接收的文件后缀
 showUpload: false, //是否显示上传按钮
 showCaption: false,//是否显示标题
 browseClass: "btn btn-primary", //按钮样式 
 previewFileIcon: "<i class=&#39;glyphicon glyphicon-king&#39;></i>", 
 });
}
登入後複製

頁面程式碼裡面,我們放置一個檔案上傳控件,如下程式碼所示。

<p class="row" style="height: 500px">
<input id="file-Portrait1" type="file">
</p>
登入後複製

這樣我們腳本程式碼的初始化程式碼如下:

//初始化fileinput控件(第一次初始化)
initFileInput("file-Portrait", "/User/EditPortrait");
登入後複製

這樣就完成了控制項的初始化了,如果我們需要上傳文件,那麼還需要JS的程式碼處理客戶端上傳的事件,同時也需要MVC後台控制器處理文件的保存操作。

例如我對窗體資料的儲存處理程式碼如下所示。

//添加记录的窗体处理
 formValidate("ffAdd", function (form) {
 $("#add").modal("hide");
 //构造参数发送给后台
 var postData = $("#ffAdd").serializeArray();
 $.post(url, postData, function (json) {
 var data = $.parseJSON(json);
 if (data.Success) {
 //增加肖像的上传处理
 initPortrait(data.Data1);//使用写入的ID进行更新
 $(&#39;#file-Portrait&#39;).fileinput(&#39;upload&#39;);
 //保存成功 1.关闭弹出层,2.刷新表格数据
 showTips("保存成功");
 Refresh();
 }
 else {
 showError("保存失败:" + data.ErrorMessage, 3000);
 }
 }).error(function () {
 showTips("您未被授权使用该功能,请联系管理员进行处理。");
 });
 });
登入後複製

其中我們注意到檔案保存的處理邏輯程式碼部分:

//增加肖像的上传处理
initPortrait(data.Data1);//使用写入的ID进行更新
$(&#39;#file-Portrait&#39;).fileinput(&#39;upload&#39;);
登入後複製

第一行程式碼就是重新建構上傳的附加內容,如使用者的ID資訊等,這樣我們就可以根據這些ID來建構一些額外的資料給後台上傳處理了。

這個函數主要就是重新給ID賦值,方便上傳的時候,取得最新的附加參數,這個跟Uploadify的處理模式一樣的。

//初始化图像信息
 function initPortrait(ctrlName, id) {
 var control = $(&#39;#&#39; + ctrlName);
 var imageurl = &#39;/PictureAlbum/GetPortrait?id=&#39; + id + &#39;&r=&#39; + Math.random();
 //重要,需要更新控件的附加参数内容,以及图片初始化显示
 control.fileinput(&#39;refresh&#39;, {
 uploadExtraData: { id: id },
 initialPreview: [ //预览图片的设置
 "<img src=&#39;" + imageurl + "&#39; class=&#39;file-preview-image&#39; alt=&#39;肖像图片&#39; title=&#39;肖像图片&#39;>",
 ],
 });
 }
登入後複製

前面我們看到,我上傳的地址是:"/User/EditPortrait",這個後台的函數我也公佈一下,希望給大家一個完整的案例代碼學習。

/// <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);
 }
登入後複製

这样我们就构建了上面的用户肖像的保存处理逻辑了,文件可以正常的保存到后台的文件系统里面,同时数据库里面记录一些必备的信息。

当然,除了用来处理用户的肖像图片,我们也可以用来构建图片相册的处理操作的。

//初始化fileinput控件(第一次初始化)
 $(&#39;#file-Portrait&#39;).fileinput({
 language: &#39;zh&#39;, //设置语言
 uploadUrl: "/FileUpload/Upload", //上传的地址
 allowedFileExtensions : [&#39;jpg&#39;, &#39;png&#39;,&#39;gif&#39;],//接收的文件后缀,
 maxFileCount: 100,
 enctype: &#39;multipart/form-data&#39;,
 showUpload: true, //是否显示上传按钮
 showCaption: false,//是否显示标题
 browseClass: "btn btn-primary", //按钮样式 
 previewFileIcon: "<i class=&#39;glyphicon glyphicon-king&#39;></i>", 
 msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
 });
登入後複製

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

jQuery和CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单

js中实现限制uploadify的上传个数

以上是JS檔案上傳神器bootstrap fileinput的解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板