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脚本代码跑起来。
Jan 09 Javascript
jquery easyui中treegrid用法的简单实例
Feb 18 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
深入浅析JavaScript中的constructor
Apr 19 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
Jul 05 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
Oct 16 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
Feb 24 Javascript
jQuery时间验证和转换为标准格式的时间格式
Mar 06 Javascript
js异步上传多张图片插件的使用方法
Oct 22 Javascript
django js 实现表格动态标序号的实例代码
Jul 12 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 json_encode奇怪问题说明
2011/09/27 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
Laravel如何使用数据库事务及捕获事务失败后的异常详解
2017/10/23 PHP
JavaScript打字小游戏代码
2011/12/26 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
js无刷新操作table的行和列
2014/03/27 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
微信小程序 参数传递详解
2016/10/24 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
vue webpack打包优化操作技巧
2018/02/22 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
vue中锚点的三种方法
2018/07/06 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python标准异常和异常处理详解
2015/02/02 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
Python3.4解释器用法简单示例
2019/03/22 Python
python调用摄像头拍摄数据集
2019/06/01 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Python操作qml对象过程详解
2019/09/26 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
应届生新闻编辑求职信
2013/11/19 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
林肯就职演讲稿
2014/05/19 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript