Commit 7da3a7eb3dfcf980dff0cd54bae82c289ad2e796

Authored by u123231312
1 parent 0a446ba4

PC静态资源管理

@@ -341,4 +341,17 @@ class Auth extends Common @@ -341,4 +341,17 @@ class Auth extends Common
341 $this->assign('qrcode_path',$arr['data']); 341 $this->assign('qrcode_path',$arr['data']);
342 return view(); 342 return view();
343 } 343 }
  344 + //增加运营管理人员
  345 + public function operateDel(){
  346 + //缓存60秒 不请求。
  347 + $arr = cache('qrcod_url');
  348 + if(!$arr){
  349 + $arr= file_get_contents("http://xt.colorcun.com/WechatApi/WechatApi/CreateOperateQrcode/");
  350 + $arr = json_decode($arr,TRUE);
  351 + cache('qrcod_url',$arr, 50);
  352 + }
  353 +
  354 + $this->assign('qrcode_path',$arr['data']);
  355 + return view();
  356 + }
344 } 357 }
@@ -238,4 +238,33 @@ class Template extends Common{ @@ -238,4 +238,33 @@ class Template extends Common{
238 } 238 }
239 } 239 }
240 240
  241 + /**
  242 + * GIF图片、短视频上传
  243 + */
  244 + public function uploadFile(){
  245 + if(request()->isPost()){
  246 + //参数获取
  247 +
  248 + /*[param] => Array
  249 + (
  250 + [name] => 1231
  251 + [pic] => /uploads/20180830/e9b8b46312a7ad1c6a52e2f762c524bf.jpg
  252 + [file] =>
  253 + [content] => 123131
  254 + [ad_id] =>
  255 + )
  256 + [post] => Array
  257 + (
  258 + [name] => 1231
  259 + [pic] => /uploads/20180830/e9b8b46312a7ad1c6a52e2f762c524bf.jpg
  260 + [file] =>
  261 + [content] => 123131
  262 + [ad_id] =>
  263 + )*/
  264 + //print_r(request()->param());die;
  265 + }
  266 + $this->assign ( 'title','GIF、短视频上传' );
  267 + return $this->fetch();
  268 + }
  269 +
241 } 270 }
1 <?php 1 <?php
2 namespace app\admin\controller; 2 namespace app\admin\controller;
  3 +require '../vendor/Qiniu/autoload.php';
3 use think\Db; 4 use think\Db;
4 use think\Request; 5 use think\Request;
5 use think\Controller; 6 use think\Controller;
6 use think\facade\Env; 7 use think\facade\Env;
  8 +use Qiniu\Auth as Auth;
  9 +use Qiniu\Storage\BucketManager;
  10 +use Qiniu\Storage\UploadManager;
7 class UpFiles extends Common 11 class UpFiles extends Common
8 { 12 {
9 public function upload(){ 13 public function upload(){
@@ -29,6 +33,76 @@ class UpFiles extends Common @@ -29,6 +33,76 @@ class UpFiles extends Common
29 return $result; 33 return $result;
30 } 34 }
31 } 35 }
  36 + public function qncloud(){
  37 + $dir = "www";
  38 + // 获取上传文件表单字段名
  39 + $fileKey = array_keys(request()->file());
  40 + // 获取表单上传文件
  41 + $file = request()->file($fileKey['0']);
  42 + $obj = $file->getInfo();
  43 + $rs = array('code' => 0, 'url' => '');
  44 + $tmpName = $obj['tmp_name'];
  45 + $name = md5($obj['name'] . $_SERVER['REQUEST_TIME']);
  46 + $ext = strrchr($obj['name'], '.');
  47 + $uploadFolder = sprintf('%suploads/'.$dir.'/',$_SERVER['DOCUMENT_ROOT']);
  48 + if (!is_dir($uploadFolder)) {
  49 + mkdir($uploadFolder);
  50 + chmod($uploadFolder,0777);
  51 + }
  52 + $imgPath = $uploadFolder . $name . $ext;
  53 + //移动到临时目录
  54 + if (move_uploaded_file($tmpName, $imgPath)) {
  55 + $accessKey = 'uva-aaonM8dukeR6phc9yuPBrOXk9brrNW_PxLD7';
  56 + $secretKey = 'oZMMVN6phk49lG0J1xwmi1Ju0ETT15EnAEWcU9Cs';
  57 + $auth = new Auth($accessKey, $secretKey);
  58 + $bucket = 'colorcun-pc';
  59 + $key = $obj['name'];
  60 + // 生成上传Token
  61 + $token = $auth->uploadToken($bucket);
  62 + // 构建 UploadManager 对象
  63 + $uploadMgr = new UploadManager();
  64 + $backUrl = "pe9jzv1q9.bkt.clouddn.com"; //返回图片在七牛的路径
  65 + list($ret, $err) = $uploadMgr->putFile($token,$key,$imgPath);
  66 + // 获取视频的时长
  67 + // 第一步先获取到到的是关于视频所有信息的json字符串
  68 + //$shichang = file_get_contents('http://'.WAILIAN.$key.'?avinfo');
  69 + // 第二部转化为对象
  70 + //$shi =json_decode($shichang);
  71 + // 第三部从中取出视频的时长
  72 + //$chang = $shi->format->duration;
  73 + // 获取封面
  74 + //$path ='http://'.WAILIAN.$ret['key'];
  75 +
  76 + /*$data = [
  77 + 'path' => $path,
  78 + 'pic' =>$vpic,
  79 + ];
  80 + $result = Db::name('image')->insert($data);
  81 + // dump(Db::getLast);
  82 + if (!$result) {
  83 + return '失败';
  84 + } else {
  85 + return '成功';
  86 + }*/
  87 + $rs['url'] = $backUrl."/".$key;
  88 + }
  89 + if($rs['url']){
  90 + //上传成功之后删除服务器文件
  91 + unlink($imgPath);
  92 + $result['code'] = 1;
  93 + $result['info'] = '图片上传成功!';
  94 + $path=str_replace('\\','/',$rs['url']);
  95 + $result['url'] = $path;
  96 + return $result;
  97 + }else{
  98 + // 上传失败获取错误信息
  99 + $result['code'] =0;
  100 + $result['info'] = $file->getError();
  101 + $result['url'] = '';
  102 + return $result;
  103 + }
  104 + }
  105 +
32 public function file(){ 106 public function file(){
33 $fileKey = array_keys(request()->file()); 107 $fileKey = array_keys(request()->file());
34 // 获取表单上传文件 例如上传了001.jpg 108 // 获取表单上传文件 例如上传了001.jpg
  1 +{include file="common/head"/}
  2 +<div class="admin-main layui-anim layui-anim-upbit" ng-app="hd" ng-controller="ctrl">
  3 + <fieldset class="layui-elem-field layui-field-title">
  4 + <legend>{$title}</legend>
  5 + </fieldset>
  6 + <blockquote class="layui-elem-quote">
  7 + <a href="{:url('uploadFile')}" class="layui-btn layui-btn-sm layui-btn-danger">
  8 + <i class="fa fa-file-image-o"></i> GIF图片、短视频上传
  9 + </a>
  10 + </blockquote>
  11 + <form class="layui-form layui-form-pane">
  12 + <div class="layui-form-item">
  13 + <label class="layui-form-label">名称</label>
  14 + <div class="layui-input-4">
  15 + <input type="text" name="name" ng-model="field.name" lay-verify="required" placeholder="{:lang('pleaseEnter')}图片/视频名称" class="layui-input">
  16 + </div>
  17 + </div>
  18 + <div class="layui-form-item">
  19 + <label class="layui-form-label">图片/视频</label>
  20 + <input type="hidden" name="pic" id="pic" value="{{field.pic}}">
  21 + <div class="layui-input-block">
  22 + <div class="layui-upload">
  23 + <button type="button" class="layui-btn layui-btn-primary" id="adBtn"><i class="icon icon-upload3"></i>点击上传</button>
  24 + <div class="layui-upload-list">
  25 + <img class="layui-upload-img" id="adPic">
  26 + <p id="demoText"></p>
  27 + <video src="" id="adVideo" controls="controls" style="width: 300px;height: 200px;display: none">
  28 + 您的浏览器不支持 video 标签。
  29 + </video>
  30 + </div>
  31 + </div>
  32 + </div>
  33 + </div>
  34 +
  35 + <div class="layui-form-item layui-form-text">
  36 + <label class="layui-form-label">备注</label>
  37 + <div class="layui-input-block">
  38 + <textarea ng-model="field.content" placeholder="请输入图片/视频备注" name="content" class="layui-textarea"></textarea>
  39 + </div>
  40 + </div>
  41 + <div class="layui-form-item">
  42 + <div class="layui-input-block">
  43 + <button type="button" class="layui-btn" lay-submit="" lay-filter="submit">{:lang('submit')}</button>
  44 + </div>
  45 + </div>
  46 + </form>
  47 +</div>
  48 +{include file="common/foot"/}
  49 +<script src="/static/common/js/angular.min.js"></script>
  50 +<script>
  51 + var m = angular.module('hd',[]);
  52 + m.controller('ctrl',['$scope',function($scope) {
  53 + $scope.field = {type_id:'',ad_id:'',name:'',url:'',open:1,sort:50,pic:'',content:''};
  54 + layui.use(['form', 'layer','upload'], function () {
  55 + var form = layui.form, $ = layui.jquery, upload = layui.upload;
  56 + if($scope.field.pic){
  57 + adPic.src = $scope.field.pic;
  58 + }
  59 + form.on('submit(submit)', function (data) {
  60 + // 提交到方法 默认为本身
  61 + data.field.ad_id = $scope.field.ad_id;
  62 + var loading = layer.load(1, {shade: [0.1, '#fff']});
  63 + $.post("{:url('uploadFile')}", data.field, function (res) {
  64 + layer.close(loading);
  65 + if (res.code > 0) {
  66 + layer.msg(res.msg, {time: 1800, icon: 1}, function () {
  67 + location.href = res.url;
  68 + });
  69 + } else {
  70 + layer.msg(res.msg, {time: 1800, icon: 2});
  71 + }
  72 + });
  73 + });
  74 + //GIF/视频上传
  75 + var uploadInst = upload.render({
  76 + elem: '#adBtn'
  77 + ,url: '{:url("UpFiles/qncloud")}'
  78 + ,before: function(obj){
  79 + //预读本地文件示例,不支持ie8
  80 + obj.preview(function(index, file, result){
  81 + if(result.substring(5,10)=="image"){
  82 + $('#adPic').attr('src', result); //图片链接(base64)
  83 + $('#adPic').css('display', 'block');
  84 + $("#adVideo").css('display', 'none');
  85 + }else{
  86 + $("#adVideo").get(0).src=result; //图片链接(base64)
  87 + $("#adVideo").css('display', 'block');
  88 + $('#adPic').css('display', 'none');
  89 + }
  90 + });
  91 + },done: function(res){
  92 + if(res.code>0){
  93 + $('#pic').val(res.url);
  94 + return layer.msg('上传成功');
  95 + }else{
  96 + //如果上传失败
  97 + return layer.msg('上传失败');
  98 + }
  99 + }
  100 + ,error: function(){
  101 + //演示失败状态,并实现重传
  102 + var demoText = $('#demoText');
  103 + demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
  104 + demoText.find('.demo-reload').on('click', function(){
  105 + uploadInst.upload();
  106 + });
  107 + }
  108 + });
  109 + });
  110 + }]);
  111 +</script>
1 /** layui-v2.3.0 MIT License By https://www.layui.com */ 1 /** layui-v2.3.0 MIT License By https://www.layui.com */
2 - ;layui.define("layer",function(e){"use strict";var i=layui.$,t=layui.layer,n=layui.hint(),a=layui.device(),o={config:{},set:function(e){var t=this;return t.config=i.extend({},t.config,e),t},on:function(e,i){return layui.onevent.call(this,r,e,i)}},l=function(){var e=this;return{upload:function(i){e.upload.call(e,i)},config:e.config}},r="upload",u="layui-upload-file",c="layui-upload-form",f="layui-upload-iframe",s="layui-upload-choose",p=function(e){var t=this;t.config=i.extend({},t.config,o.config,e),t.render()};p.prototype.config={accept:"images",exts:"",auto:!0,bindAction:"",url:"",field:"file",method:"post",data:{},drag:!0,size:0,number:0,multiple:!1},p.prototype.render=function(e){var t=this,e=t.config;e.elem=i(e.elem),e.bindAction=i(e.bindAction),t.file(),t.events()},p.prototype.file=function(){var e=this,t=e.config,n=e.elemFile=i(['<input class="'+u+'" type="file" accept="'+t.acceptMime+'" name="'+t.field+'"',t.multiple?" multiple":"",">"].join("")),o=t.elem.next();(o.hasClass(u)||o.hasClass(c))&&o.remove(),a.ie&&a.ie<10&&t.elem.wrap('<div class="layui-upload-wrap"></div>'),e.isFile()?(e.elemFile=t.elem,t.field=t.elem[0].name):t.elem.after(n),a.ie&&a.ie<10&&e.initIE()},p.prototype.initIE=function(){var e=this,t=e.config,n=i('<iframe id="'+f+'" class="'+f+'" name="'+f+'" frameborder="0"></iframe>'),a=i(['<form target="'+f+'" class="'+c+'" method="'+t.method,'" key="set-mine" enctype="multipart/form-data" action="'+t.url+'">',"</form>"].join(""));i("#"+f)[0]||i("body").append(n),t.elem.next().hasClass(c)||(e.elemFile.wrap(a),t.elem.next("."+c).append(function(){var e=[];return layui.each(t.data,function(i,t){t="function"==typeof t?t():t,e.push('<input type="hidden" name="'+i+'" value="'+t+'">')}),e.join("")}()))},p.prototype.msg=function(e){return t.msg(e,{icon:2,shift:6})},p.prototype.isFile=function(){var e=this.config.elem[0];if(e)return"input"===e.tagName.toLocaleLowerCase()&&"file"===e.type},p.prototype.preview=function(e){var i=this;window.FileReader&&layui.each(i.chooseFiles,function(i,t){var n=new FileReader;n.readAsDataURL(t),n.onload=function(){e&&e(i,t,this.result)}})},p.prototype.upload=function(e,t){var n,o=this,l=o.config,r=o.elemFile[0],u=function(){var t=0,n=0,a=e||o.files||o.chooseFiles||r.files,u=function(){l.multiple&&t+n===o.fileLength&&"function"==typeof l.allDone&&l.allDone({total:o.fileLength,successful:t,aborted:n})};layui.each(a,function(e,a){var r=new FormData;r.append(l.field,a),layui.each(l.data,function(e,i){i="function"==typeof i?i():i,r.append(e,i)}),i.ajax({url:l.url,type:l.method,data:r,contentType:!1,processData:!1,dataType:"json",headers:l.headers||{},success:function(i){t++,d(e,i),u()},error:function(){n++,o.msg("请求上传接口出现异常"),m(e),u()}})})},c=function(){var e=i("#"+f);o.elemFile.parent().submit(),clearInterval(p.timer),p.timer=setInterval(function(){var i,t=e.contents().find("body");try{i=t.text()}catch(n){o.msg("获取上传后的响应信息出现异常"),clearInterval(p.timer),m()}i&&(clearInterval(p.timer),t.html(""),d(0,i))},30)},d=function(e,i){if(o.elemFile.next("."+s).remove(),r.value="","object"!=typeof i)try{i=JSON.parse(i)}catch(t){return i={},o.msg("请对上传接口返回有效JSON")}"function"==typeof l.done&&l.done(i,e||0,function(e){o.upload(e)})},m=function(e){l.auto&&(r.value=""),"function"==typeof l.error&&l.error(e||0,function(e){o.upload(e)})},h=l.exts,v=function(){var i=[];return layui.each(e||o.chooseFiles,function(e,t){i.push(t.name)}),i}(),g={preview:function(e){o.preview(e)},upload:function(e,i){var t={};t[e]=i,o.upload(t)},pushFile:function(){return o.files=o.files||{},layui.each(o.chooseFiles,function(e,i){o.files[e]=i}),o.files},resetFile:function(e,i,t){var n=new File([i],t);o.files=o.files||{},o.files[e]=n}},y=function(){if("choose"!==t&&!l.auto||(l.choose&&l.choose(g),"choose"!==t))return l.before&&l.before(g),a.ie?a.ie>9?u():c():void u()};if(v=0===v.length?r.value.match(/[^\/\\]+\..+/g)||[]||"":v,0!==v.length){switch(l.accept){case"file":if(h&&!RegExp("\\w\\.("+h+")$","i").test(escape(v)))return o.msg("选择的文件中包含不支持的格式"),r.value="";break;case"video":if(!RegExp("\\w\\.("+(h||"avi|mp4|wma|rmvb|rm|flash|3gp|flv")+")$","i").test(escape(v)))return o.msg("选择的视频中包含不支持的格式"),r.value="";break;case"audio":if(!RegExp("\\w\\.("+(h||"mp3|wav|mid")+")$","i").test(escape(v)))return o.msg("选择的音频中包含不支持的格式"),r.value="";break;default:if(layui.each(v,function(e,i){RegExp("\\w\\.("+(h||"jpg|png|gif|bmp|jpeg$")+")","i").test(escape(i))||(n=!0)}),n)return o.msg("选择的图片中包含不支持的格式"),r.value=""}if(o.fileLength=function(){var i=0,t=e||o.files||o.chooseFiles||r.files;return layui.each(t,function(){i++}),i}(),l.number&&o.fileLength>l.number)return o.msg("同时最多只能上传的数量为:"+l.number);if(l.size>0&&!(a.ie&&a.ie<10)){var F;if(layui.each(o.chooseFiles,function(e,i){if(i.size>1024*l.size){var t=l.size/1024;t=t>=1?t.toFixed(2)+"MB":l.size+"KB",r.value="",F=t}}),F)return o.msg("文件不能超过"+F)}y()}},p.prototype.events=function(){var e=this,t=e.config,o=function(i){e.chooseFiles={},layui.each(i,function(i,t){var n=(new Date).getTime();e.chooseFiles[n+"-"+i]=t})},l=function(i,n){var a=e.elemFile,o=i.length>1?i.length+"个文件":(i[0]||{}).name||a[0].value.match(/[^\/\\]+\..+/g)||[]||"";a.next().hasClass(s)&&a.next().remove(),e.upload(null,"choose"),e.isFile()||t.choose||a.after('<span class="layui-inline '+s+'">'+o+"</span>")};t.elem.off("upload.start").on("upload.start",function(){var a=i(this),o=a.attr("lay-data");if(o)try{o=new Function("return "+o)(),e.config=i.extend({},t,o)}catch(l){n.error("Upload element property lay-data configuration item has a syntax error: "+o)}e.config.item=a,e.elemFile[0].click()}),a.ie&&a.ie<10||t.elem.off("upload.over").on("upload.over",function(){var e=i(this);e.attr("lay-over","")}).off("upload.leave").on("upload.leave",function(){var e=i(this);e.removeAttr("lay-over")}).off("upload.drop").on("upload.drop",function(n,a){var r=i(this),u=a.originalEvent.dataTransfer.files||[];r.removeAttr("lay-over"),o(u),t.auto?e.upload(u):l(u)}),e.elemFile.off("upload.change").on("upload.change",function(){var i=this.files||[];o(i),t.auto?e.upload():l(i)}),t.bindAction.off("upload.action").on("upload.action",function(){e.upload()}),t.elem.data("haveEvents")||(e.elemFile.on("change",function(){i(this).trigger("upload.change")}),t.elem.on("click",function(){e.isFile()||i(this).trigger("upload.start")}),t.drag&&t.elem.on("dragover",function(e){e.preventDefault(),i(this).trigger("upload.over")}).on("dragleave",function(e){i(this).trigger("upload.leave")}).on("drop",function(e){e.preventDefault(),i(this).trigger("upload.drop",e)}),t.bindAction.on("click",function(){i(this).trigger("upload.action")}),t.elem.data("haveEvents",!0))},o.render=function(e){var i=new p(e);return l.call(i)},e(r,o)});  
  2 +;
  3 +layui.define("layer",
  4 +function(e) {
  5 + "use strict";
  6 + var i = layui.$,
  7 + t = layui.layer,
  8 + n = layui.hint(),
  9 + a = layui.device(),
  10 + o = {
  11 + config: {},
  12 + set: function(e) {
  13 + var t = this;
  14 + return t.config = i.extend({},
  15 + t.config, e),
  16 + t
  17 + },
  18 + on: function(e, i) {
  19 + return layui.onevent.call(this, r, e, i)
  20 + }
  21 + },
  22 + l = function() {
  23 + var e = this;
  24 + return {
  25 + upload: function(i) {
  26 + e.upload.call(e, i)
  27 + },
  28 + config: e.config
  29 + }
  30 + },
  31 + r = "upload",
  32 + u = "layui-upload-file",
  33 + c = "layui-upload-form",
  34 + f = "layui-upload-iframe",
  35 + s = "layui-upload-choose",
  36 + p = function(e) {
  37 + var t = this;
  38 + t.config = i.extend({},
  39 + t.config, o.config, e),
  40 + t.render()
  41 + };
  42 + p.prototype.config = {
  43 + accept: "images",
  44 + exts: "",
  45 + auto: !0,
  46 + bindAction: "",
  47 + url: "",
  48 + field: "file",
  49 + method: "post",
  50 + data: {},
  51 + drag: !0,
  52 + size: 0,
  53 + number: 0,
  54 + multiple: !1
  55 + },
  56 + p.prototype.render = function(e) {
  57 + var t = this,
  58 + e = t.config;
  59 + e.elem = i(e.elem),
  60 + e.bindAction = i(e.bindAction),
  61 + t.file(),
  62 + t.events()
  63 + },
  64 + p.prototype.file = function() {
  65 + var e = this,
  66 + t = e.config,
  67 + n = e.elemFile = i(['<input class="' + u + '" type="file" accept="' + t.acceptMime + '" name="' + t.field + '"', t.multiple ? " multiple": "", ">"].join("")),
  68 + o = t.elem.next(); (o.hasClass(u) || o.hasClass(c)) && o.remove(),
  69 + a.ie && a.ie < 10 && t.elem.wrap('<div class="layui-upload-wrap"></div>'),
  70 + e.isFile() ? (e.elemFile = t.elem, t.field = t.elem[0].name) : t.elem.after(n),
  71 + a.ie && a.ie < 10 && e.initIE()
  72 + },
  73 + p.prototype.initIE = function() {
  74 + var e = this,
  75 + t = e.config,
  76 + n = i('<iframe id="' + f + '" class="' + f + '" name="' + f + '" frameborder="0"></iframe>'),
  77 + a = i(['<form target="' + f + '" class="' + c + '" method="' + t.method, '" key="set-mine" enctype="multipart/form-data" action="' + t.url + '">', "</form>"].join(""));
  78 + i("#" + f)[0] || i("body").append(n),
  79 + t.elem.next().hasClass(c) || (e.elemFile.wrap(a), t.elem.next("." + c).append(function() {
  80 + var e = [];
  81 + return layui.each(t.data,
  82 + function(i, t) {
  83 + t = "function" == typeof t ? t() : t,
  84 + e.push('<input type="hidden" name="' + i + '" value="' + t + '">')
  85 + }),
  86 + e.join("")
  87 + } ()))
  88 + },
  89 + p.prototype.msg = function(e) {
  90 + return t.msg(e, {
  91 + icon: 2,
  92 + shift: 6
  93 + })
  94 + },
  95 + p.prototype.isFile = function() {
  96 + var e = this.config.elem[0];
  97 + if (e) return "input" === e.tagName.toLocaleLowerCase() && "file" === e.type
  98 + },
  99 + p.prototype.preview = function(e) {
  100 + var i = this;
  101 + window.FileReader && layui.each(i.chooseFiles,
  102 + function(i, t) {
  103 + var n = new FileReader;
  104 + n.readAsDataURL(t),
  105 + n.onload = function() {
  106 + e && e(i, t, this.result)
  107 + }
  108 + })
  109 + },
  110 + p.prototype.upload = function(e, t) {
  111 + var n, o = this,
  112 + l = o.config,
  113 + r = o.elemFile[0],
  114 + u = function() {
  115 + var t = 0,
  116 + n = 0,
  117 + a = e || o.files || o.chooseFiles || r.files,
  118 + u = function() {
  119 + l.multiple && t + n === o.fileLength && "function" == typeof l.allDone && l.allDone({
  120 + total: o.fileLength,
  121 + successful: t,
  122 + aborted: n
  123 + })
  124 + };
  125 + layui.each(a,
  126 + function(e, a) {
  127 + var r = new FormData;
  128 + r.append(l.field, a),
  129 + layui.each(l.data,
  130 + function(e, i) {
  131 + i = "function" == typeof i ? i() : i,
  132 + r.append(e, i)
  133 + }),
  134 + i.ajax({
  135 + url: l.url,
  136 + type: l.method,
  137 + data: r,
  138 + contentType: !1,
  139 + processData: !1,
  140 + dataType: "json",
  141 + headers: l.headers || {},
  142 + success: function(i) {
  143 + t++,
  144 + d(e, i),
  145 + u()
  146 + },
  147 + error: function() {
  148 + n++,
  149 + o.msg("请求上传接口出现异常"),
  150 + m(e),
  151 + u()
  152 + }
  153 + })
  154 + })
  155 + },
  156 + c = function() {
  157 + var e = i("#" + f);
  158 + o.elemFile.parent().submit(),
  159 + clearInterval(p.timer),
  160 + p.timer = setInterval(function() {
  161 + var i, t = e.contents().find("body");
  162 + try {
  163 + i = t.text()
  164 + } catch(n) {
  165 + o.msg("获取上传后的响应信息出现异常"),
  166 + clearInterval(p.timer),
  167 + m()
  168 + }
  169 + i && (clearInterval(p.timer), t.html(""), d(0, i))
  170 + },
  171 + 30)
  172 + },
  173 + d = function(e, i) {
  174 + if (o.elemFile.next("." + s).remove(), r.value = "", "object" != typeof i) try {
  175 + i = JSON.parse(i)
  176 + } catch(t) {
  177 + return i = {},
  178 + o.msg("请对上传接口返回有效JSON")
  179 + }
  180 + "function" == typeof l.done && l.done(i, e || 0,
  181 + function(e) {
  182 + o.upload(e)
  183 + })
  184 + },
  185 + m = function(e) {
  186 + l.auto && (r.value = ""),
  187 + "function" == typeof l.error && l.error(e || 0,
  188 + function(e) {
  189 + o.upload(e)
  190 + })
  191 + },
  192 + h = l.exts,
  193 + v = function() {
  194 + var i = [];
  195 + return layui.each(e || o.chooseFiles,
  196 + function(e, t) {
  197 + i.push(t.name)
  198 + }),
  199 + i
  200 + } (),
  201 + g = {
  202 + preview: function(e) {
  203 + o.preview(e)
  204 + },
  205 + upload: function(e, i) {
  206 + var t = {};
  207 + t[e] = i,
  208 + o.upload(t)
  209 + },
  210 + pushFile: function() {
  211 + return o.files = o.files || {},
  212 + layui.each(o.chooseFiles,
  213 + function(e, i) {
  214 + o.files[e] = i
  215 + }),
  216 + o.files
  217 + },
  218 + resetFile: function(e, i, t) {
  219 + var n = new File([i], t);
  220 + o.files = o.files || {},
  221 + o.files[e] = n
  222 + }
  223 + },
  224 + y = function() {
  225 + if ("choose" !== t && !l.auto || (l.choose && l.choose(g), "choose" !== t)) return l.before && l.before(g),
  226 + a.ie ? a.ie > 9 ? u() : c() : void u()
  227 + };
  228 + if (v = 0 === v.length ? r.value.match(/[^\/\\]+\..+/g) || [] || "": v, 0 !== v.length) {
  229 + switch (l.accept) {
  230 + case "file":
  231 + if (h && !RegExp("\\w\\.(" + h + ")$", "i").test(escape(v))) return o.msg("选择的文件中包含不支持的格式"),
  232 + r.value = "";
  233 + break;
  234 + case "video":
  235 + if (!RegExp("\\w\\.(" + (h || "avi|wma|rmvb|rm|flash|3gp|flv") + ")$", "i").test(escape(v))) return o.msg("选择的视频中包含不支持的格式"),
  236 + r.value = "";
  237 + break;
  238 + case "audio":
  239 + if (!RegExp("\\w\\.(" + (h || "mp3|wav|mid") + ")$", "i").test(escape(v))) return o.msg("选择的音频中包含不支持的格式"),
  240 + r.value = "";
  241 + break;
  242 + default:
  243 + if (layui.each(v,
  244 + function(e, i) {
  245 + RegExp("\\w\\.(" + (h || "mp4|jpg|png|gif|bmp|jpeg$") + ")", "i").test(escape(i)) || (n = !0)
  246 + }), n) return o.msg("选择的图片中包含不支持的格式"),
  247 + r.value = ""
  248 + }
  249 + if (o.fileLength = function() {
  250 + var i = 0,
  251 + t = e || o.files || o.chooseFiles || r.files;
  252 + return layui.each(t,
  253 + function() {
  254 + i++
  255 + }),
  256 + i
  257 + } (), l.number && o.fileLength > l.number) return o.msg("同时最多只能上传的数量为:" + l.number);
  258 + if (l.size > 0 && !(a.ie && a.ie < 10)) {
  259 + var F;
  260 + if (layui.each(o.chooseFiles,
  261 + function(e, i) {
  262 + if (i.size > 1024 * l.size) {
  263 + var t = l.size / 1024;
  264 + t = t >= 1 ? t.toFixed(2) + "MB": l.size + "KB",
  265 + r.value = "",
  266 + F = t
  267 + }
  268 + }), F) return o.msg("文件不能超过" + F)
  269 + }
  270 + y()
  271 + }
  272 + },
  273 + p.prototype.events = function() {
  274 + var e = this,
  275 + t = e.config,
  276 + o = function(i) {
  277 + e.chooseFiles = {},
  278 + layui.each(i,
  279 + function(i, t) {
  280 + var n = (new Date).getTime();
  281 + e.chooseFiles[n + "-" + i] = t
  282 + })
  283 + },
  284 + l = function(i, n) {
  285 + var a = e.elemFile,
  286 + o = i.length > 1 ? i.length + "个文件": (i[0] || {}).name || a[0].value.match(/[^\/\\]+\..+/g) || [] || "";
  287 + a.next().hasClass(s) && a.next().remove(),
  288 + e.upload(null, "choose"),
  289 + e.isFile() || t.choose || a.after('<span class="layui-inline ' + s + '">' + o + "</span>")
  290 + };
  291 + t.elem.off("upload.start").on("upload.start",
  292 + function() {
  293 + var a = i(this),
  294 + o = a.attr("lay-data");
  295 + if (o) try {
  296 + o = new Function("return " + o)(),
  297 + e.config = i.extend({},
  298 + t, o)
  299 + } catch(l) {
  300 + n.error("Upload element property lay-data configuration item has a syntax error: " + o)
  301 + }
  302 + e.config.item = a,
  303 + e.elemFile[0].click()
  304 + }),
  305 + a.ie && a.ie < 10 || t.elem.off("upload.over").on("upload.over",
  306 + function() {
  307 + var e = i(this);
  308 + e.attr("lay-over", "")
  309 + }).off("upload.leave").on("upload.leave",
  310 + function() {
  311 + var e = i(this);
  312 + e.removeAttr("lay-over")
  313 + }).off("upload.drop").on("upload.drop",
  314 + function(n, a) {
  315 + var r = i(this),
  316 + u = a.originalEvent.dataTransfer.files || [];
  317 + r.removeAttr("lay-over"),
  318 + o(u),
  319 + t.auto ? e.upload(u) : l(u)
  320 + }),
  321 + e.elemFile.off("upload.change").on("upload.change",
  322 + function() {
  323 + var i = this.files || [];
  324 + o(i),
  325 + t.auto ? e.upload() : l(i)
  326 + }),
  327 + t.bindAction.off("upload.action").on("upload.action",
  328 + function() {
  329 + e.upload()
  330 + }),
  331 + t.elem.data("haveEvents") || (e.elemFile.on("change",
  332 + function() {
  333 + i(this).trigger("upload.change")
  334 + }), t.elem.on("click",
  335 + function() {
  336 + e.isFile() || i(this).trigger("upload.start")
  337 + }), t.drag && t.elem.on("dragover",
  338 + function(e) {
  339 + e.preventDefault(),
  340 + i(this).trigger("upload.over")
  341 + }).on("dragleave",
  342 + function(e) {
  343 + i(this).trigger("upload.leave")
  344 + }).on("drop",
  345 + function(e) {
  346 + e.preventDefault(),
  347 + i(this).trigger("upload.drop", e)
  348 + }), t.bindAction.on("click",
  349 + function() {
  350 + i(this).trigger("upload.action")
  351 + }), t.elem.data("haveEvents", !0))
  352 + },
  353 + o.render = function(e) {
  354 + var i = new p(e);
  355 + return l.call(i)
  356 + },
  357 + e(r, o)
  358 +});