Bootstrap fileinput 使用心得

因为公司项目里面用到多文件上传,选来选取就用了bootstrp fileinput 

项目要求:1、支持预览  2、同步上传 3、上传前可以取消待上传文件  4、文件格式限制及文件大小限制  

1、对上传控件的配置

  $("#input-ke-2").fileinput({
            theme: "explorer", //主题
            language: 'zh',
            uploadUrl: "/Members/WorkOrder/PostAttachment",// 上传请求路径
            allowedFileExtensions: ['jpg', 'gif', 'png', 'jpeg', 'pdf'],//允许上传的文件后缀       
            uploadAsync: false, //是否允许异步上传
            showUpload: false,//是否显示上传按钮
            showCaption: false,//是否显示容器
        dropZoneEnabled: false,//是否显示拖拽区域 
            removeFromPreviewOnError:true,//是否移除校验文件失败的文件
            uploadExtraData: function (previewId, index) {   //额外参数 返回json数组  
                return {
                    'id': commId  // commId 为全局变量,可以给控件上传额外参数  

                };
            },
            layoutTemplates: {    //取消上传按钮
                actionUpload:'',
            },
            showPreview: true,      //显示预览   
            minFileCount: 1,   //最低文件数量
            maxFileCount: 3,   //最多文件数量
            maxFileSize: 512,  //允许文件上传大小
            overwriteInitial: true,
            previewFileIcon: '<i class="fa fa-file"></i>',
            initialPreviewAsData: true, // defaults markup  
            preferIconicPreview: false, // 是否优先显示图标  false 即优先显示图片
            previewFileIconSettings: { // configure your icon file extensions
                'pdf': '<i class="fa fa-file-pdf-o text-danger"></i>',
                'jpg': '<i class="fa fa-file-photo-o text-danger"></i>',
                'gif': '<i class="fa fa-file-photo-o text-muted"></i>',
                'png': '<i class="fa fa-file-photo-o text-primary"></i>',
                'jpeg': '<i class="fa fa-file-photo-o text-primary"></i>'
            },
        });

2、在配置完成后,对控件进行初始化  

    $("#input-ke-2").fileinput();

3、因为项目里面用的是同步上传,使用同步上传时,控件将文件数组发送给服务器,服务器依据传入的额外参数 和文件集合来 存储文件。(关于异步上传,控件会一个个的将文件发送给服务器,也就是有几个文件就会请求几次服务器),至于使用异步还是同步,还是依据项目的需求吧


4、关于如何后台如何接收文件,在最后会贴上代码。这里先将如何执行回调函数


5、

        $("#input-ke-2").on("filebatchuploadsuccess", function (event, data, previewId, index) {
            var result = data.response.result;//接收后台返回的数据       
            $.each(result, function (i, item)  //each函数会遍历从后台返回的错误信息
            {
                if (item.error != null) { abp.message.warn(item.error); return; }
            });
            $("#input-ke-2").fileinput('reset'); //重置上传控件(清空已文件)
            abp.notify.info("提交成功");       
        });

6、  这里提醒几个控件的方法

       var filesCount = $('#input-ke-2').fileinput('getFilesCount'); //获取控件选中的文件(不包括校验失败的文件,如 文件名、文件大小)

      $('#input-ke-2').fileinput('upload');        //然后触发插件开始上传文件

注意: 因为我用的是手动上传,故需要上面这个方法来执行控件上传。


后台代码:(我使用的是c#) 备注: 比较敏感信息 已用xxxx代替

      public JsonResult xxx(int id)
        {
            string[] extName = { ".jpg", ".gif", ".jpeg", ".png", ".pdf" };
            var _directory = xxxxxxx;
            // HttpFileCollection

            HttpFileCollection upload = System.Web.HttpContext.Current.Request.Files;

            List<FileViewOutput> fileInfoList = new List<FileViewOutput>();

            for (int i = 0; i < upload.Count; i++)
            {
                FileViewOutput fileInfo = new FileViewOutput();
                //限制上传文件数量
                if (upload.Count > 3) { fileInfo.Error = "上传文件超过限制"; return Json(fileInfo); }

                HttpPostedFileBase file = Request.Files[i];


                string ext = Path.GetExtension(file.FileName).ToLower();

                if (!extName.Contains(ext)) { fileInfo.Error = "请上传jpg、gif、jpeg、png、pdf格式文件"; return Json(fileInfo); };

                if (file.InputStream.Length > 512000) //1MB.
                {
                    fileInfo.Error = "上传的文件不要超过500k";
                    return Json(fileInfo);
                }
                var namefix = Guid.NewGuid().ToString() + "_" + DateTime.Now.ToString("HHmmss") + Path.GetExtension(file.FileName);
                string file_name = "/" + namefix;

                fileInfo.Url = "xxxxxxxx" + namefix;
                fileInfo.Name = file.FileName;

                file.SaveAs(_directory + file_name);

                fileInfoList.Add(fileInfo);

            }
            //保存工单附件
            根据 fileInfoList 和传递的id 进行文件的保存



            return Json(fileInfoList);

        }

项目展示:






  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值