最新thinkphp5整合webuploader,可预览拖拽搜索删除

来源:互联网 发布:unity3d数学基础 编辑:程序博客网 时间:2024/06/05 05:04
thinkphp5整合webuploader,封装成上传组件。

WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件分片并发上传,极大的提高了文件上传效率。



最近很多浏览器升级全面支持html5,并且禁用了flash,很多上传插件都需要用到flash,比如我们的项目中用到的uploadify,在最新谷歌火狐浏览下就兼容不了,最后采取了webuploader替代,感觉非常不错,并且同时兼容html5和flash上传,还支持大文件分片上传,有兴趣的朋友可以继续优化改善。下面截几张图看看效果





  1. <html lang="zh-cn">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  4. <title>文件管理</title>
  5. <link rel="stylesheet" type="text/css" href="/public/plugins/webuploader/webuploader.css">
  6. <link rel="stylesheet" type="text/css" href="/public/plugins/webuploader/css/style.css">
  7. </head>
  8. <body>
  9. <div class="upload-box">
  10.     <ul class="tabs">
  11.         <li class="checked" id="upload_tab">本地上传</li>
  12.         <li id="manage_tab">在线管理</li>
  13.         <li id="search_tab">文件搜索</li>
  14.     </ul>
  15.     <div class="container">
  16.         <div class="area upload-area area-checked" id="upload_area">
  17.             <div id="uploader">
  18.                 <div class="statusBar" style="display:none;">
  19.                     <div class="progress">
  20.                         <span class="text">0%</span>
  21.                         <span class="percentage"></span>
  22.                     </div><div class="info"></div>
  23.                     <div class="btns">
  24.                         <div id="filePicker2"></div><div class="uploadBtn">开始上传</div>
  25.                         <div class="saveBtn">确定使用</div>
  26.                     </div>
  27.                 </div>
  28.                 <div class="queueList">
  29.                     <div id="dndArea" class="placeholder">
  30.                         <div id="filePicker"></div>
  31.                         <p>或将文件拖到这里,本次最多可选{$info.num|default=1}个</p>
  32.                     </div>
  33.                 </div>
  34.             </div>
  35.         </div>
  36.         <div class="area manage-area" id="manage_area">
  37.             <ul class="choose-btns">
  38.                 <li class="btn sure checked">确定</li>
  39.                 <li class="btn cancel">取消</li>
  40.             </ul>
  41.             <div class="file-list">
  42.                 <ul id="file_all_list">
  43.                     <!--<li class="checked">
  44.                         <div class="img">
  45.                             <img src="" />
  46.                             <span class="icon"></span>
  47.                         </div>
  48.                         <div class="desc"></div>
  49.                     </li>-->
  50.                 </ul>
  51.             </div>
  52.         </div>
  53.         <div class="area search-area" id="search_area">
  54.             <ul class="choose-btns">
  55.                 <li class="search">
  56.                     <div class="search-condition">
  57.                         <input class="key" type="text" />
  58.                         <input class="submit" type="button" hidefocus="true" value="搜索" />
  59.                     </div>
  60.                 </li>
  61.                 <li class="btn sure checked">确定</li>
  62.                 <li class="btn cancel">取消</li>
  63.             </ul>
  64.             <div class="file-list">
  65.                 <ul id="file_search_list">
  66.                     <!--<li>
  67.                         <div class="img">
  68.                             <img src="" />
  69.                             <span class="icon"></span>
  70.                         </div>
  71.                         <div class="desc"></div>
  72.                     </li>-->
  73.                 </ul>
  74.             </div>
  75.         </div>
  76.         <div class="fileWarp" style="display:none;">
  77.             <fieldset>
  78.                 <legend>列表</legend>
  79.                 <ul>
  80.                 </ul>
  81.             </fieldset>
  82.         </div>
  83.     </div>
  84. </div>
  85. <script type="text/javascript" src="/public/js/jquery-1.10.2.min.js"></script>
  86. <script type="text/javascript" src="/public/plugins/webuploader/webuploader.min.js"></script>
  87. <script type="text/javascript" src="/public/plugins/webuploader/upload.js"></script>
  88. <script>
  89. $(function(){
  90.     var config = {
  91.             "swf":"/public/plugins/webuploader/Uploader.swf",
  92.             "server":"{$info.upload}",
  93.             "filelistPah":"{$info.fileList}",
  94.             "delPath":"{:U('Uploadify/delupload')}",
  95.             "chunked":false,
  96.             "chunkSize":524288,
  97.             "fileNumLimit":{$info.num|default=1},
  98.             "fileSizeLimit":209715200,
  99.             "fileSingleSizeLimit":2097152,
  100.             "fileVal":"file",
  101.             "auto":true,
  102.             "formData":{},
  103.             "pick":{"id":"#filePicker","label":"点击选择图片","name":"file"},
  104.             "thumb":{"width":110,"height":110,"quality":70,"allowMagnify":true,"crop":true,"preserveHeaders":false,"type":"image\/jpeg"}
  105.     };
  106.     Manager.upload($.extend(config, {type : "Images"}));
  107.     
  108.     /*点击保存按钮时
  109.      *判断允许上传数,检测是单一文件上传还是组文件上传
  110.      *如果是单一文件,上传结束后将地址存入$input元素
  111.      *如果是组文件上传,则创建input样式,添加到$input后面
  112.      *隐藏父框架,清空列队,移除已上传文件样式*/
  113.     $(".statusBar .saveBtn").click(function(){
  114.         var callback = "{$info.func}";
  115.         var num = {$info.num|default=1};
  116.         var fileurl_tmp = [];
  117.         if(callback != "undefined"){    
  118.             if(num > 1){    
  119.                  $("input[name^='fileurl_tmp']").each(function(index,dom){
  120.                     fileurl_tmp[index] = dom.value;
  121.                  });    
  122.             }else{
  123.                 fileurl_tmp = $("input[name^='fileurl_tmp']").val();    
  124.             }
  125.             eval('window.parent.'+callback+'(fileurl_tmp)');
  126.             window.parent.layer.closeAll();
  127.             return;
  128.         }                     
  129.         if(num > 1){
  130.                 var fileurl_tmp = "";
  131.                 $("input[name^='fileurl_tmp']").each(function(){
  132.                     fileurl_tmp += '<li rel="'+ this.value +'"><input class="input-text" type="text" name="{$info.input}[]" value="'+ this.value +'" /><a href="javascript:void(0);" onclick="ClearPicArr(\''+ this.value +'\',\'\')">删除</a></li>';    
  133.                 });            
  134.                 $(window.parent.document).find("#{$info.input}").append(fileurl_tmp);
  135.         }else{
  136.                 $(window.parent.document).find("#{$info.input}").val($("input[name^='fileurl_tmp']").val());
  137.         }
  138.         window.parent.layer.closeAll();
  139.     });
  140.     
  141. });
  142. </script>
  143. </body>
  144. </html>

详细源码演示下载地址 http://www.tpshop.cn
原创粉丝点击