bootstrap fileinput 上传插件的基础使用


Posted in Javascript onFebruary 17, 2017

前言:

之前的三篇介绍了下bootstrap table的一些常见用法,发现博主对这种扁平化的风格有点着迷了。前两天做一个excel导入的功能,前端使用原始的input type='file'这种标签,效果不忍直视,于是博主下定决心要找一个好看的上传组件换掉它。既然bootstrap开源,那么社区肯定有很多关于它的组件,肯定也有这种常见的上传组件吧。经过一番查找,功夫不负有心人,还是被博主找到了这个组件:bootstrap fileinput。关于这个组件的简单应用,基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解,只不过很多细节都没有涉及,于是博主在完成开发任务之余,总结了下这个组件的一些常见用法。在此记录下,就算做个笔记吧,也给需要使用的朋友提供点方便。

源码以及API地址:

bootstrap-fileinput源码:https://github.com/kartik-v/bootstrap-fileinput

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

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

一、效果展示

 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" rel="external nofollow" 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”表示标签的样式。这里很重要,如果class="file",则中文化不能生效。

2、js初始化

$(function () { 
 //0.初始化fileinput 
 var oFileInput = new FileInput(); 
 oFileInput.Init("txt_file", "/api/OrderApi/ImportOrder"); 
});<span class="cnblogs_code_copy"></span> 
<span class="cnblogs_code_copy"></span> 
//初始化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的基础使用大概就介绍完了,其实就是一个上传的组件,也不存在什么高级用法。重点是把界面做得更加友好,更好的增加用户体验。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery动态创建DOM、表单元素的实现代码
Aug 09 Javascript
通过jQuery源码学习javascript(一)
Dec 27 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
JavaScript简单表格编辑功能实现方法
Apr 16 Javascript
js实现网页图片延时加载 提升网页打开速度
Jan 26 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
BootStrap Tooltip插件源码解析
Dec 27 Javascript
VueJs使用Amaze ui调整列表和内容页面
Nov 30 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
使用Node.js在深度学习中做图片预处理的方法
Sep 18 Javascript
element-ui table组件如何使用render属性的实现
Nov 04 Javascript
JS实现购物车基本功能
Nov 08 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 #Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
Feb 17 #Javascript
浅析JavaScript中var that=this
Feb 17 #Javascript
Bootstrap表格使用方法详解
Feb 17 #Javascript
BootStrap与Select2使用小结
Feb 17 #Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 #Javascript
Vue.js原理分析之observer模块详解
Feb 17 #Javascript
You might like
PHP自动生成月历代码
2006/10/09 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
mac上配置Android环境变量的方法
2018/07/08 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
python fabric使用笔记
2015/05/09 Python
python实现俄罗斯方块
2018/06/26 Python
python文本数据处理学习笔记详解
2019/06/17 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
幼儿园儿童节主持词
2014/03/21 职场文书
读书月活动方案
2014/05/22 职场文书
初中学习计划书范文
2014/09/15 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
教师党员整改措施
2014/10/24 职场文书
小学生思想品德评语
2014/12/31 职场文书
音乐之声观后感
2015/06/04 职场文书
CentOS MySql8 远程连接实战
2022/04/19 MySQL