Bootstrap Fileinput文件上传组件用法详解


Posted in Javascript onMay 10, 2016

最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到三水点靠木平台,供大家参考,同时也方便以后的查找。本文写的不好还请见谅。

一、效果展示

1、原始的input type='file',简直不忍直视。

Bootstrap Fileinput文件上传组件用法详解

2、不做任何装饰的bootstrap fileinput:(bootstrap fileinput初级进化)

Bootstrap Fileinput文件上传组件用法详解

Bootstrap Fileinput文件上传组件用法详解

3、bootstrap fileinput高级进化:中文化、可拖拽上传、文件扩展名校验(如果不是需要的文件,不让上传)

Bootstrap Fileinput文件上传组件用法详解

Bootstrap Fileinput文件上传组件用法详解

拖拽上传

Bootstrap Fileinput文件上传组件用法详解

上传中

Bootstrap Fileinput文件上传组件用法详解

Bootstrap Fileinput文件上传组件用法详解

4、bootstrap fileinput究极进化:允许同时多线程上传多个文件。

Bootstrap Fileinput文件上传组件用法详解

上传中

Bootstrap Fileinput文件上传组件用法详解

上传完成后

Bootstrap Fileinput文件上传组件用法详解

二、代码示例

怎么样?效果如何?不要急,我们一步一步来实现以上的效果。

1、cshtml页面

首先引入需要的js和css文件。

//bootstrap fileinput
bundles.Add(new ScriptBundle("~/Content/bootstrap-fileinput/js").Include(
"~/Content/bootstrap-fileinput/js/fileinput.min.js",
"~/Content/bootstrap-fileinput/js/fileinput_locale_zh.js"));
bundles.Add(new StyleBundle("~/Content/bootstrap-fileinput/css").Include(
"~/Content/bootstrap-fileinput/css/fileinput.min.css"));
@Scripts.Render("~/Content/bootstrap-fileinput/js")
@Styles.Render("~/Content/bootstrap-fileinput/css")

然后定义input type='file'标签

<form>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">请选择Excel文件</h4>
</div>
<div class="modal-body">
<a href="~/Data/ExcelTemplate/Order.xlsx" class="form-control" style="border:none;">下载导入模板</a>
<input type="file" name="txt_file" id="txt_file" multiple class="file-loading" />
</div></div>
</div>
</div>
</form>

重点看这一句:

<input type="file" name="txt_file" id="txt_file" multiple class="file-loading" />

multiple表示允许同时上传多个文件,class=“file-loading”表示标签的样式。

2、js初始化

$(function () {
//0.初始化fileinput
var oFileInput = new FileInput();
oFileInput.Init("txt_file", "/api/OrderApi/ImportOrder");
});
//初始化fileinput
var FileInput = function () {
var oFile = new Object();
//初始化fileinput控件(第一次初始化)
oFile.Init = function(ctrlName, uploadUrl) {
var control = $('#' + ctrlName);
//初始化上传控件的样式
control.fileinput({
language: 'zh', //设置语言
uploadUrl: uploadUrl, //上传的地址
allowedFileExtensions: ['jpg', 'gif', 'png'],//接收的文件后缀
showUpload: true, //是否显示上传按钮
showCaption: false,//是否显示标题
browseClass: "btn btn-primary", //按钮样式 
//dropZoneEnabled: false,//是否显示拖拽区域
//minImageWidth: 50, //图片的最小宽度
//minImageHeight: 50,//图片的最小高度
//maxImageWidth: 1000,//图片的最大宽度
//maxImageHeight: 1000,//图片的最大高度
//maxFileSize: 0,//单位为kb,如果为0表示不限制文件大小
//minFileCount: 0,
maxFileCount: 10, //表示允许同时上传的最大文件个数
enctype: 'multipart/form-data',
validateInitialCount:true,
previewFileIcon: "<i class='glyphicon glyphicon-king'></i>",
msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!",
});
//导入文件上传完成之后的事件
$("#txt_file").on("fileuploaded", function (event, data, previewId, index) {
$("#myModal").modal("hide");
var data = data.response.lstOrderImport;
if (data == undefined) {
toastr.error('文件格式类型不正确');
return;
}
//1.初始化表格
var oTable = new TableInit();
oTable.Init(data);
$("#div_startimport").show();
});
}
return oFile;
};

说明:

(1)fileinput()方法里面传入的是一个json数据,它里面有很多属性,每个属性代表着初始化上传控件的时候的特性,如果这些属性都不设置,则表示使用默认的设置。如果园友们想看看它里面有哪些属性,可以打开fileinput.js的源码,在它的最后如图:

Bootstrap Fileinput文件上传组件用法详解

这些属性如果不特意设置,就会使用默认值。

(2)$("#txt_file").on("fileuploaded", function (event, data, previewId, index) {}这个方法注册上传完成后的回调事件。也就是后天处理上传的文件之后进入这个方法里面处理。

3、后台C#对应的方法

还记得在js里面初始化控件方法fileinput()里面有一个参数url吗,这个url对应的值就指示C#后天对应的处理方法。还是贴出后台的处理方法。

[ActionName("ImportOrder")]
public object ImportOrder()
{
var oFile = HttpContext.Current.Request.Files["txt_file"];
var lstOrderImport = new List<DTO_TO_ORDER_IMPORT>();
#region 0.数据准备
var lstExistOrder = orderManager.Find();
var lstOrderNo = lstExistOrder.Select(x => x.ORDER_NO).ToList();
var lstTmModel = modelManager.Find();
var lstTmMaterial = materialManager.Find();
//var iMax_Import_Index = lstExistOrder.Max(x => x.IMPORT_INDEX);
//iMax_Import_Index = iMax_Import_Index == null ? 0 : iMax_Import_Index.Value;
#endregion
#region 1.通过Stream得到Workbook对象
IWorkbook workbook = null;
if (oFile.FileName.EndsWith(".xls"))
{
workbook = new HSSFWorkbook(oFile.InputStream);
}
else if(oFile.FileName.EndsWith(".xlsx"))
{
workbook = new XSSFWorkbook(oFile.InputStream);
}
if (workbook == null)
{
return new { };
}
//...............处理excel的逻辑
//orderManager.Add(lstOrder);
lstOrderImport = lstOrderImport.OrderBy(x => x.IMPORT_STATU).ToList();
return new { lstOrderImport = lstOrderImport };
}

由于博主的项目是上传excel,所以这里用是用的NPOI的逻辑,如果是上传图片等文件,可以使用GDI去处理图片。

4、同时上传多个文件

同时上传多个文件的时候,前台会发送多个异步的请求到后台,也就是说,当同时上传三个文件的时候,后台的ImportOrder方法会进入三次。这样就能使用多线程同时去处理三个文件。

三、总结

关于bootstrap fileinput的基础使用大概就介绍完了,其实就是一个上传的组件,也不存在什么高级用法。重点是把界面做得更加友好,更好的增加用户体验。

关于Bootstrap Fileinput文件上传组件用法详解就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
Javascript 个人笔记(没有整理,很乱)
Jul 07 Javascript
jquery 选择器部分整理
Oct 28 Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 Javascript
取得元素的左和上偏移量的方法
Sep 17 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
Dec 18 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
原生JavaScript制作计算器
Oct 16 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
Jan 21 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
Sep 07 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 Javascript
vue Cli 环境删除与重装教程 - 版本文档
Sep 11 Javascript
vue element-ui中table合计指定列求和实例
Nov 02 Javascript
javascript实现的猜数小游戏完整实例代码
May 10 #Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 #Javascript
全国省市二级联动下拉菜单 js版
May 10 #Javascript
js实现的简单图片浮动效果完整实例
May 10 #Javascript
jquery实现点击弹出可放大居中及关闭的对话框(附demo源码下载)
May 10 #Javascript
jQuery选择器基础入门教程
May 10 #Javascript
jquery实现图片上传前本地预览功能
May 10 #Javascript
You might like
php fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
javascript IFrame 强制刷新代码
2009/07/23 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
js实现动态显示时间效果
2017/03/06 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
javaScript实现鼠标在文字上悬浮时弹出悬浮层效果
2020/04/12 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python求最大公约数和最小公倍数的简单方法
2020/02/13 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
华为c/c++笔试题
2016/01/25 面试题
相亲大会策划方案
2014/06/05 职场文书
2015教师节通讯稿
2015/07/20 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
员工给公司的建议书
2019/06/24 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
pandas中对文本类型数据的处理小结
2021/11/01 Python
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
Go语言测试库testify使用学习
2022/07/23 Golang