Bootstrap文件上传组件之bootstrap fileinput


Posted in Javascript onNovember 25, 2016

前言:之前的三篇介绍了下bootstrap的一些常用组件,发现博主对这种扁平化的风格有点着迷了。前两天做一个excel导入的功能,前端使用原始的input type='file'这种标签,效果不忍直视,于是博主下定决心要找一个好看的上传组件换掉它。既然bootstrap开源,那么社区肯定有很多关于它的组件,肯定也有这种常见的上传组件吧。经过一番查找,功夫不负有心人,还是被博主找到了这个组件:bootstrap fileinput。在此记录下,就算做个学习笔记,也给需要使用的朋友提供点方便。

Bootstrap组件系列文章:

bootstrap-fileinput在线API:http://plugins.krajee.com/file-input

bootstrap-fileinput Demo展示:http://plugins.krajee.com/file-basic-usage-demo

1、html页面

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

<link href="~/Content/bootstrap-fileinput/css/fileinput.min.css" rel="stylesheet" />
<script src="~/Content/bootstrap-fileinput/js/fileinput.min.js"></script>
<--中文包-->
<script src="~/Content/bootstrap-fileinput/js/fileinput_locale_zh.js"></script>

当然,既然是bootstrap的组件,它肯定需要bootstrap.js的支持。然后需要jquery的支持。

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

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

multiple表示允许同时上传多个文件,class=“file-loading”表示标签的样式。这里很重要,如果class="file",则中文化不能生效。

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文件上传组件之bootstrap fileinput

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

(2)$("#txt_file").on("fileuploaded", function (event, data, previewId, index) {}这个方法注册上传完成后的回调事件。也就是后台处理上传的文件之后会进到这个方法里面。经过以上简单的初始化,就可以得到上述示例图片中的效果。

3、后台对应的方法

还记得在js里面初始化控件方法fileinput()里面有一个参数url吗,这个url对应的值就指示后台对应的处理方法,还是贴出后台的处理方法。(以下为C#示例,如果你的后台语言不是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处理Excel的逻辑,如果是上传图片等文件,可以使用GDI去处理图片。

4、同时上传多个文件

同时上传多个文件的时候,前台会发送多个异步的请求到后台,也就是说,当同时上传三个文件的时候,后台的ImportOrder方法会进入三次。这样就能使用多线程同时去处理三个文件。这个博主就不做示例了,有兴趣的朋友可以自行研究下。

三、总结

关于bootstrap fileinput的基础使用大概就介绍完了,其实就是一个上传的组件,也不存在什么高级用法。重点是把界面做得更加友好,更好的增加用户体验。需要说明的是,组件对IE浏览器的要求比较高,应该最少要IE9以上,还有就是拖拽上传功能在IE浏览器的体验不太好。

如果你的项目也需要文件上传,不妨试试这个,需要测试Demo或者有什么问题可以随时联系博主。当然如果你觉得本文对你有帮助,可以打赏博主,也可以点赞以资鼓励。不管是物资奖励还是精神支持,都是对博主分享精神的肯定,博主一定继续努力。

Javascript 相关文章推荐
jquery 查找iframe父级页面元素的实现代码
Aug 28 Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
Javascript中的五种数据类型详解
Dec 26 Javascript
JavaScript数组常用方法
Mar 02 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
Jul 27 Javascript
jQuery下拉美化搜索表单效果代码分享
Aug 25 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
Sep 04 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
Apr 01 Javascript
JavaScript实现微信红包算法及问题解决方法
Apr 26 Javascript
微信小程序云开发如何实现数据库自动备份实现
Aug 16 Javascript
Vuex实现数据增加和删除功能
Nov 11 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 Javascript
Bootstrap基本布局实现方法详解
Nov 25 #Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
Nov 25 #Javascript
Bootstrap栅格系统学习笔记
Nov 25 #Javascript
JS公共小方法之判断对象是否为domElement的实例
Nov 25 #Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单
Nov 25 #Javascript
javaScript语法总结
Nov 25 #Javascript
JS实现“隐藏与显示”功能(多种方法)
Nov 24 #Javascript
You might like
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
PHP JSON格式数据交互实例代码详解
2011/01/13 PHP
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
jQuery选择器全集详解
2014/11/24 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Javascript前端下载后台传来的文件流代码实例
2020/08/18 Javascript
[01:50]2014DOTA2西雅图邀请赛 专访欢乐周宝龙
2014/07/08 DOTA
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
利用Python实现命令行版的火车票查看器
2016/08/05 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python微信公众号开发简单流程
2018/03/23 Python
python 多线程重启方法
2019/02/18 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
python deque模块简单使用代码实例
2020/03/12 Python
Django celery异步任务实现代码示例
2020/11/26 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
SmartBuyGlasses德国:购买太阳镜和眼镜
2019/08/20 全球购物
数控加工专业毕业生自荐信
2013/09/27 职场文书
党小组鉴定意见
2015/06/02 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
python如何正确使用yield
2021/05/21 Python
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP