bootstrap-fileinput

1.代码案例下载:https://github.com/kartik-v/bootstrap-fileinput
2.实例:
1).上传



    <form enctype="multipart/form-data">
    <span>资料文件</span>
    
        <div class="file-loading">
            <input id="kv-explorer" type="file" multiple>
        </div>
        <br>
       <input type="hidden"  class="downloadPath"/>
    </form>
    <form class="layui-form layui-form-pane" action="">
 
 <div class="layui-form-item">
    <label class="layui-form-label">主题:</label>
    <div class="layui-input-block">
      <input type="text" name="title" autocomplete="off" placeholder="请输入主题" class="layui-input" lay-verify="required">
    </div>
  </div>
  
  <div class="layui-form-item">
    <label class="layui-form-label">创建人:</label>
    <div class="layui-input-block">
      <input type="text" name="sendName" th:value=${#httpServletRequest.getAttribute('username')} autocomplete="off" disabled="disabled" placeholder="请填写发送人" class="layui-input" lay-verify="required">
    </div>
  </div>
  
   <div class="layui-form-item">
    <label class="layui-form-label">项目名:</label>
    <div class="layui-input-block">
      <select name="demoPath"   lay-filter="projectName" >
        <option value="">请选择一个项目</option>
    </select>     
    </div>
  </div>
  
  <div class="layui-form-item layui-form-text">
    <label class="layui-form-label">备注</label>
    <div class="layui-input-block">
      <textarea placeholder="请输入内容" class="layui-textarea" id="remark"></textarea>
    </div>
  </div>
  
  <div class="layui-form-item">
    <button class="layui-btn" lay-submit="" lay-filter="submitaddKbm">提交</button>
  </div>
</form>

<script type="text/javascript">
$(document).ready(function () {
    $.ajax({
        url:basePath+'/pm/listProject',
        dataType:'json',
        success:function(reg){
            for(var i=0;i<reg.objList.length;i++){
                $("select[name='demoPath']").append("<option value='"+reg.objList[i].projectId+"'>"+reg.objList[i].projectName+"</option>");
            }
            layui.use('form', function(){
                  var form = layui.form;
                  form.render();
                  
                });
        }
    })
    
    

    $("#kv-explorer").fileinput({
        'theme': 'explorer-fas',
        'uploadUrl': basePath+'/kbm/upload/' ,
        //overwriteInitial: false,
        enctype:'multipart/form-data',
        uploadAsync: true, //默认异步上传
        initialPreviewAsData: false,
        initialPreview: [], 
        initialPreviewConfig: [ ]
       
    });
    
    $("#kv-explorer").on("fileuploaded", function (event, data, previewId, index) {
        var response = data.response;
     //   alert(response.filePath);
         console.log(response.msg);
         var downpath=$(".downloadPath").val();
         $(".downloadPath").val(downpath+response.msg+",");
         console.log($(".downloadPath").val());
      
       
    });
    $("#kv-explorer").on("filesuccessremove", function (event, data, previewId, index) { 
          console.log("删除" +data);
          var extStart = data.lastIndexOf('_');
          var name=data.substring(extStart+1,data.length);
          
          var dataPath=  $(".downloadPath").val();
          var da=dataPath.split(",");
          var result="";
          for(var i=0;i<da.length;i++){
              if(da[i].indexOf(name )== -1 && da[i]!=''){
                  console.log(da[i]);
                  result+=da[i]+",";
              }
          }
          $(".downloadPath").val(result);
     });
    
});

layui.use(['form', 'layedit', 'laydate'], function(){
      var form = layui.form
      ,layer = layui.layer
        
      //监听提交
      form.on('submit(submitaddKbm)', function(data){
          
          var dataPath=$(".downloadPath").val();
          if(dataPath==null || dataPath==''){
              layer.msg("文件未上传", {icon: 5});
              return false;
          }else{
              var title=$("input[name='title']").val();
              var sendName=$("input[name='sendName']").val();
              var remark=$("#remark").val();
              var demoPath=$("select[name='demoPath']").val();
              console.log(demoPath);
            $.ajax({
                url:basePath+'/kbm/addKbm',
                dataType:'json',
                data:{
                    dataPath:dataPath,
                    title:title,
                    sendName:sendName,
                    remark:remark,
                    demoPath:demoPath
                },
                success:function(res){
                    if(res.flag){
                          //请求成功将路径放入隐藏域
                        
                        layer.msg('新建成功', {icon: 1});
                      }else{
                          //请求失败
                        layer.msg(res.msg, {icon: 5});
                      }
                }
                
            })
            return false;  
          }
          
      });
    
      
    });
</script>

2).页面回显

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>知识管理编辑</title>
 <script th:src="@{/plugins/bootstrap/js/jquery.min.js}"></script>
    
     <!-- Fonts -->
    <link type='text/css' rel="stylesheet" th:href='@{/plugins/bootstrap/css/boostrap-font.css}' />
    <link type='text/css' rel="stylesheet" th:href='@{/plugins/bootstrap/css/boostrap-font-one.css}' />
    <!-- CSS Libs -->
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/bootstrap-3.3.4.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/font-awesome.min.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/animate.min.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/bootstrap-switch.min.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/checkbox3.min.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/jquery.dataTables.min.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/dataTables.bootstrap.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/bootstrap/css/select2.min.css}" />
    
    <link rel="stylesheet" th:href="@{/layui/css/layui.css}"  media="all">
    <link th:href="@{/css/fileinput.css}" media="all" rel="stylesheet" type="text/css"/>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" crossorigin="anonymous">
    <link th:href="@{/js/bootstrap-fileinput/themes/explorer-fas/theme.css}" media="all" rel="stylesheet" type="text/css"/>
     <link type="text/css" rel="stylesheet" th:href="@{/plugins/lib/css/style.css}" />
    <link type="text/css" rel="stylesheet" th:href="@{/plugins/lib/css/themes/flat-blue.css}" />
    
    <script type="text/javascript" th:src="@{/plugins/bootstrap/js/bootstrap.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/bootstrap-growl.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/bootstrap-switch.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/jquery/js/jquery.datetimepicker.full.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/md5.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/jquery.matchHeight-min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/jquery.dataTables.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/dataTables.bootstrap.min.js}"></script>
<script type="text/javascript" th:src="@{/plugins/bootstrap/js/select2.full.min.js}"></script>
<script type="text/javascript" th:src="@{/js/rootPath.js}"></script>
<script type="text/javascript" th:src="@{/plugins/lib/js/app.js}"></script>

<script th:src="@{/layui/layui.js}"></script>

<script th:src="@{/js/bootstrap-fileinput/js/plugins/piexif.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/js/plugins/sortable.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/js/fileinput.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/js/locales/fr.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/js/locales/es.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/themes/fas/theme.js}" type="text/javascript"></script>
<script th:src="@{/js/bootstrap-fileinput/themes/explorer-fas/theme.js}" type="text/javascript"></script>
<link rel="stylesheet" th:href="@{/layui/css/layui.css}"/>
   
</head>
<body>

    <form enctype="multipart/form-data">
    <span>资料文件</span>
    
        <div class="file-loading">
           <input id="kv-explorer" type="file" multiple>
        </div>
        <br>
       <input type="hidden"  class="downloadPath"/>
    </form>
    
    <form class="layui-form layui-form-pane" action="">
    <div class="layui-form-item">
    <label class="layui-form-label">发送人:</label>
    <div class="layui-input-block">
      <input type="text" name="sendName" disabled="disabled" autocomplete="off" placeholder="请填写发送人" class="layui-input" >
    </div>
  </div>
  
  <div class="layui-form-item layui-form-text">
    <label class="layui-form-label">备注</label>
    <div class="layui-input-block">
      <textarea placeholder="请输入内容" class="layui-textarea" id="remark"></textarea>
    </div>
  </div>
  
  <div class="layui-form-item layui-form-text">
    <div class="layui-form-item layui-form-text">
    <label class="layui-form-label">更新记录内容:</label>
    <div class="layui-input-block">
      <textarea placeholder="请输入内容" class="layui-textarea" id="updateContent"></textarea>
    </div>
  </div>
  </div>
    <div class="layui-form-item">
    <button class="layui-btn" lay-submit="" lay-filter="updateKbm">提交</button>
  </div>
    </form>
</body>
<script type="text/javascript">
$(document).ready(function () {
var kbmId=GetQueryString("kbmId");
var initprev = new Array(); 

$.ajax({
    url:basePath+'/kbm/previewImg',
    dataType:'json',
    data:{
        kbmId:kbmId
    },success:function(data){
        var initPreviewConfig = new Array();  
        
        if(data[0]!=null){
            for(var i=0;i<data.length;i++){
                var extStart = data[i].lastIndexOf('.');
                var namestart=data[i].lastIndexOf('\\');
                
                var name=data[i].substring(namestart+1,data[i].length);
                var ext = data[i].substring(extStart+1, data[i].length).toUpperCase();
                
                if(ext!='JPG'&&ext!='PNG'&&ext!='BMP'&&ext!='GIF'&&ext!='JPE'){
                    console.log(ext)
                    initPreviewConfig.push({type:ext, size: 8000, caption:name,url:basePath+'/integratenManaged/delFile', key: data[i], downloadUrl:data[i]});
                }else{
                    initPreviewConfig.push({caption: name, size: 762980,url:basePath+'/integratenManaged/delFile', key:data[i], downloadUrl:data[i]});
                }
               
            }
        }
         $("#kv-explorer").fileinput({
                'theme': 'explorer-fas',
                'uploadUrl': basePath+'/kbm/upload/' ,
                //overwriteInitial: false,
                enctype:'multipart/form-data',
                uploadAsync: true, //默认异步上传             
                showPreview :true,  //是否显示预览
                showRemove :true, //显示移除按钮
                showDownload:true,
                overwriteInitial:false,//是否希望覆盖初始预览内容和标题设置
                initialPreview: data,
                initialPreviewAsData: true, // defaults markup  
                initialPreviewConfig: initPreviewConfig,
            })
         
            $("#kv-explorer").on("fileuploaded", function (event, data, previewId, index) {
                var response = data.response;
             //   alert(response.filePath);
                 console.log(response.msg);
                 var downpath=$(".downloadPath").val();
                 $(".downloadPath").val(downpath+response.msg+",");
                 console.log($(".downloadPath").val());
              
               
            });


         $('#kv-explorer').on('filepredelete', function(event, key) {  
             console.log("删除" +key);
             var dataPath=  $(".downloadPath").val();
              var da=dataPath.split(",");
              
              var nameStart = key.lastIndexOf('\\');
              var name=key.substring(nameStart+1,key.length);
              
              var result="";
              for(var i=0;i<da.length;i++){
                  if(da[i].indexOf(name)== -1 && da[i]!=''){
                      console.log(da[i]);
                      result+=da[i]+",";
                  }
              }
              $(".downloadPath").val(result);
         });  
         $("#kv-explorer").on("filesuccessremove", function (event, data, previewId, index) { 
              console.log("删除" +data);
              var extStart = data.lastIndexOf('_');
              var name=data.substring(extStart+1,data.length);
              
              var dataPath=  $(".downloadPath").val();
              var da=dataPath.split(",");
              var result="";
              for(var i=0;i<da.length;i++){
                  if(da[i].indexOf(name )== -1 && da[i]!=''){
                      console.log(da[i]);
                      result+=da[i]+",";
                  }
              }
              $(".downloadPath").val(result);
         });
        

        
    }
})
console.log("初始化"+initprev);

    
});


</script>
<script th:src="@{/layui/layui.js}"></script>
<script type="text/javascript" th:inline="none">
var kbmId=GetQueryString("kbmId");
$(function(){
    $.ajax({
        url:basePath+'/kbm/viewKbm',
        dataType:'json',
        data:{
            kbmId:kbmId
        },
        success:function(reg){
            var date=reg.obj;
            
            $("input[name='sendName']").val(date.sendName);
            $("#remark").val(date.remark);
            $(".downloadPath").val(date.dataPath);
            
            console.log(date.dataPath);
            
        }
    })
}) 
layui.use(['form', 'layedit', 'laydate'], function(){
      var form = layui.form
      ,layer = layui.layer
        
      
      //监听提交
      form.on('submit(updateKbm)', function(data){
          var dataPath=$(".downloadPath").val();
          var title=$("input[name='title']").val();
          var sendName=$("input[name='sendName']").val();
          var remark=$("#remark").val();
          var updateContent=$("#updateContent").val();
        $.ajax({
            url:basePath+'/kbm/editKbm',
            dataType:'json',
            data:{
                dataPath:dataPath,
                title:title,
                sendName:sendName,
                remark:remark,
                updateContent:updateContent,
                kbmId:kbmId
            },
            success:function(res){
                if(res.flag){
                      //请求成功将路径放入隐藏域
                    
                    layer.msg('更新成功', {icon: 1});
                  }else{
                      //请求失败
                    layer.msg(res.msg, {icon: 5});
                  }
            }
            
        })
        return false;
      });
    
      
    });

</script>
</html>

3)编辑
后台对比接口

Map<String, List<String>> map = ContrastTool.contrastPath(oldkbm.getDataPath(), kbm.getDataPath());

   public static Map<String, List<String>> contrastPath(String oldPath, String newPath) {
        Map<String, List<String>> map = new HashMap<String, List<String>>();

        List<String> add = new ArrayList<String>();
        List<String> del = new ArrayList<String>();
        List<String> unalt = new ArrayList<String>();

        String[] oldPathArr = oldPath.split(",");
        String[] newPathArr = newPath.split(",");

        List<String> oldlist = new ArrayList<String>();
        List<String> newlist = new ArrayList<String>();
        for (String oldPathStr : oldPathArr) {
            oldlist.add(oldPathStr);
        }
        for (String newPathStr : newPathArr) {
            newlist.add(newPathStr);

        }

        //如果newPath里面有old没有的则是新增的
        for (String newstr : newlist) {
            if (!oldlist.contains(newstr) && !add.contains(newstr)) {
                add.add(newstr);
            }
            if (oldlist.contains(newstr) && !unalt.contains(newstr)) {
                unalt.add(newstr);
            }

        }
        map.put("add", add);
        map.put("unalt", unalt);
        //如果old有,new没有的则是删除的
        for (String old : oldlist) {
            if (!newlist.contains(old) && !del.contains(old)) {
                del.add(old);
            }

        }
        map.put("del", del);
        return map;
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容