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 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
基于jquery的不规则矩形的排列实现代码
Apr 16 Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 Javascript
Javascript学习笔记之 函数篇(三) : 闭包和引用
Nov 23 Javascript
javascript实现时间格式输出FormatDate函数
Jan 13 Javascript
JavaScript自定义分页样式
Jan 17 Javascript
jquery.form.js异步提交表单详解
Apr 25 jQuery
10分钟上手vue-cli 3.0 入门介绍
Apr 04 Javascript
详解Webpack + ES6 最新环境搭建与配置
Jun 04 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
Postman的下载及安装教程详解
Oct 16 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php file_put_contents()功能函数(集成了fopen、fwrite、fclose)
2011/05/24 PHP
基于php缓存的详解
2013/05/15 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
基于JQuery实现仿网易邮箱全屏动感滚动插件fullPage
2015/09/20 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
浅析JavaScriptSerializer类的序列化与反序列化
2016/11/22 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
JS实现图片放大缩小的方法
2017/02/15 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
随机生成10个不重复的0-100的数字(实例讲解)
2017/08/16 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
利用jquery如何从json中读取数据追加到html中
2017/12/01 jQuery
vue 组件中slot插口的具体用法
2018/04/03 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
详解Node.js使用token进行认证的简单示例
2020/05/25 Javascript
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
Python 支持向量机分类器的实现
2020/01/15 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
中专自我鉴定范文
2013/10/16 职场文书
银行个人求职自荐信范文
2013/12/16 职场文书
小学生家长寄语
2014/04/02 职场文书
合伙协议书范本
2014/04/21 职场文书
销售顾问工作计划书
2014/08/15 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
浅谈Mysql多表连接查询的执行细节
2021/04/24 MySQL
python中的sys模块和os模块
2022/03/20 Python