field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>1,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'','helpTips'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>1,'fileNumLimit'=>1],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'320/362/1f48ae2059304e3e3904185febe2f34d.jpg']); //上传单文件 //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>2,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>2,'buttonTxt'=>'选择文件'],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']); //上传头像(手机端) //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>3,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>3],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']); //上传封面(手机端) //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>4,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>4],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']); //上传封面(PC) //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>5,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'width:400px;height:225px;line-height:225px;','helpTips'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => false],'uploadType'=>5],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1','value'=>'']); //上传多图(PC) //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row','style'=>'display:block']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>1,'buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'','helpTips'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>1],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'col-md-1 test','fixStyle'=>'width:200px;height:120px;','value'=>'']); //上传多文件(PC) //echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>2,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']); //echo manks\FileInput::widget(['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>2,'buttonTxt'=>'选择文件'],'name'=>'cert_info[idcard_img]','imageBlockClass'=>'','value'=>'']); //上传多图(h5) echo $form->field($model, 'avatar',['labelOptions' => ['class' => 'form-label col-md-1'],'options'=>['class'=>'row']])->widget('manks\FileInput', ['clientOptions' => ['pick' => ['multiple' => true],'uploadType'=>8,'buttonTxt'=>'选择文件','buttonDivClass'=>'','defaultImage'=>''],'imageBlockClass'=>'col-md-1','fixStyle'=>'']); */ namespace manks; use Yii; use yii\widgets\InputWidget; use yii\helpers\Html; use yii\base\InvalidConfigException; use yii\helpers\Url; use yii\helpers\Json; use app\modules\admin\models\Config; class FileInput extends InputWidget { public $clientOptions = [];//传入参数 public $chooseButtonClass = ['class' => 'btn btn-light']; public $chooseFileBlockClass = 'choosefile-block'; public $imageBlockClass='';//图片框样式 public $imageClass='';//图片样式 public $fixStyle=''; public $containStyle=''; public $delIconClass = '';//删除样式 public $containerClass=''; public $helpTips=''; public $theme = '';//定义文档上传页面的风格 private $_view;//视图对象 private $_hashVar;//用于上传按钮Class, Modal 弹框ID ,通过一定算法生成 private $_config;//上传组件配置 private $_domain;//上传成功后的文件路由域名 private $_appdomain;//应用域名 private $_defaultImg;//传图时候显示的默认图 private $_encOptions;//编码后的传入参数 private $_fixImgClass; private $_loadingImg;//loading 图片 private $assetsUrl; //下面是不传model 时候的用法 public $name; public $id; public $value; public function init () { if(empty($name))parent::init(); $this->_domain = UPLOAD_URL; $this->_appdomain = APP_URL; $this->_view = $this->getView(); $this->initOptions(); $this->initConfig(); $this->registerClientScript(); //对图片排列样式纠正 if(defined('IN_ADMIN')&&IN_ADMIN)//后台不能重复加载bootstrap.js { $this->_fixImgClass = $this->imageBlockClass.' fix-img'; } else { $this->_fixImgClass = $this->imageBlockClass.' fix-img'; } } public function run () { if ($this->hasModel()) { $model = $this->model; $attribute = $this->attribute; } else { $model = null; $attribute = null; } // 单文件 if (empty($this->_config['pick']['multiple'])||$this->_config['pick']['multiple']==false) { $html = $this->renderInput($model, $attribute); if($this->_config['uploadType']==1)//单图 { $html .= $this->renderSingleImage($model, $attribute); } else if($this->_config['uploadType']==2)//单文件 { $html .= $this->renderSingleFile($model, $attribute); } else if($this->_config['uploadType']==3)//前台上传头像(H5) { $html .= $this->renderMobileAvatar($model, $attribute); } else if($this->_config['uploadType']==4)//前台上传封面(H5) { $html .= $this->renderMobileThumb($model, $attribute); } else if($this->_config['uploadType']==5)//前台上传封面(PC) { } else if($this->_config['uploadType']==6)//前台上传单图(PC美化) { } else if($this->_config['uploadType']==88)//前台上传单文档 { $html .= $this->renderSingleUpload($model, $attribute); } }else { $html = $this->renderMultiInput($model, $attribute); if($this->_config['uploadType']==1)//图 { $html .= $this->renderMultiImage($model, $attribute); } else if($this->_config['uploadType']==2)//文件 { $html .= $this->renderMultiFile($model, $attribute); } else if($this->_config['uploadType']==8)//H5多图 { } else if($this->_config['uploadType']==99)//前台批量上传文档 { $html .= $this->renderMultidoc(); } } echo $html; } /** * init options */ public function initOptions () { // to do. if ($this->hasModel()){ $id = md5($this->options['id']);//通过传入的INPUT 元素ID,生成上传选择器ID前半段 } else { $id = md5($this->name); } $this->id = $id; $this->hashClientOptions("webupload_config_{$id}"); } /** * register base js config */ public function initConfig () { if (empty($this->_domain)) { throw new InvalidConfigException("param `domain` must set.", 1); } $this->_config = $this->mergeConfig(); $asset = FileInputAsset::register($this->_view); $assetsUrl = $asset->baseUrl; $this->assetsUrl = $assetsUrl; $this->_loadingImg = $assetsUrl.'/webuploader/loading.gif'; if(!empty($this->_config['defaultImage'])) { $this->_defaultImg = $this->_config['defaultImage']; } else { $this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png'; } $this->_config['defaultImage'] = $this->_defaultImg; $config = Json::htmlEncode($this->_config); $js = <<_hashVar} = {$config}; $('#{$this->_hashVar}').webupload_fileinput({$this->_hashVar}); JS; $this->_view->registerJs($js); } /** * Registers the needed client script and options. */ public function registerClientScript () { } /** * generate hash var by plugin options */ protected function hashClientOptions($name) { $this->_encOptions = empty($this->clientOptions) ? '' : Json::htmlEncode($this->clientOptions);//JSON编码客户端元素参数 $this->_hashVar = $name . '_' . hash('crc32', $this->_encOptions); } /* **合并上传组件配置 * buttonTxt:按钮上面显示的文字 * buttonDivClass:按钮父级容器样式 * * * */ public function mergeConfig () { //系统设置的上传限制 $sysConfigInfo = Config::find()->where("name='attachment'")->one(); $sysConfig = string2array($sysConfigInfo->value); //设置文件类型限制 if(($this->clientOptions['uploadType']==2||$this->clientOptions['uploadType']==88||$this->clientOptions['uploadType']==99)&&empty($this->clientOptions['accept'])) { $this->clientOptions['accept'] = [ 'title' => 'Files', 'extensions' => 'gif,jpg,jpeg,bmp,png,pdf,doc,ppt,pptx,xls,xlsx,docx,rar,zip,7z,tar.gz,war,txt,ico,mp4,mp3,flv', 'mimeTypes' => '*', ]; if(!empty($sysConfig['file_type'])) { $this->clientOptions['accept']['extensions'] = str_replace('|',',',$sysConfig['file_type']); } } else if($this->clientOptions['uploadType']==1||$this->clientOptions['uploadType']==3||$this->clientOptions['uploadType']==4||$this->clientOptions['uploadType']==5||$this->clientOptions['uploadType']==6||$this->clientOptions['uploadType']==8) { $this->clientOptions['accept'] = [ 'title' => 'Images', 'extensions' => 'gif,jpg,jpeg,bmp,png,ico', 'mimeTypes' => 'image/*', ]; } //如果客户端没有传入大小限制,采用系统配置 if(!empty($sysConfig['file_single_size_limit'])&&empty($this->clientOptions['fileSingleSizeLimit'])) { $this->clientOptions['fileSingleSizeLimit'] = $sysConfig['file_single_size_limit']*1024*1024; } if(!empty($sysConfig['file_size_limit'])&&empty($this->clientOptions['fileSizeLimit'])) { $this->clientOptions['fileSizeLimit'] = $sysConfig['file_size_limit']*1024*1024; } if(!empty($sysConfig['file_num_limit'])&&empty($this->clientOptions['fileNumLimit'])) { $this->clientOptions['fileNumLimit'] = $sysConfig['file_num_limit']; } $config = $this->mergeArray($this->getDefaultClientOptions(), $this->clientOptions); //初始表单需要的csrf if (isset($this->clientOptions['csrf']) && $this->clientOptions['csrf'] === false) { } else { $config['formData'][Yii::$app->request->csrfParam] = Yii::$app->request->csrfToken; } $config['modal_id'] = $this->_hashVar; if (empty($config['server'])) { $config['server'] = Url::to([Yii::$app->params['webuploader']['uploadUrl']]); } if (empty($config['md5checkUrl'])) { $config['md5checkUrl'] = API_URL.Yii::$app->params['webuploader']['md5checkUrl']; } $config['compress'] = false; return $config; } /** * 合并数组 */ public function mergeArray ($oriArr, $desArr) { foreach ($oriArr as $k => $v) { if (array_key_exists($k, $desArr)) { if (is_array($v) && $v) { foreach ($v as $k2 => $v2) { if (array_key_exists($k2, $desArr[$k])&&$desArr[$k][$k2]!=null) { $oriArr[$k][$k2] = $desArr[$k][$k2]; } } } else { if($desArr[$k]!=null)$oriArr[$k] = $desArr[$k]; } } } return $oriArr; } /** * register default config for js */ public function getDefaultClientOptions () { return Yii::$app->params['webuploader']['baseConfig']; } /** * render html body-input */ public function renderInput ($model=null, $attribute=null) { Html::addCssClass($this->chooseButtonClass, " {$this->_hashVar}"); $eles = []; if ($this->hasModel()) { $eles[] = Html::tag('div',Html::activeTextInput($model, $attribute, ['class' => 'input-'.$this->id]), ['style'=>'display:none']); } else { $eles[] ='
'; } if($this->_config['uploadType']==3) { if(!empty($this->_config['defaultImage'])) { $this->_defaultImg = $this->_config['defaultImage']; } else { $this->_defaultImg = $this->assetsUrl.'/webuploader/noavatar.png'; } if(!empty($this->containerClass)&&$this->containerClass=='upltu')$this->_defaultImg = ''; $this->_config['defaultImage'] = $this->_defaultImg; $value = $this->hasModel()?$model->$attribute:$this->value; $attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one(); $uploadId = $this->id; $src = $this->_defaultImg; if ($this->hasModel()) { if (($value = $model->$attribute)) { $src = $this->realUrl($value); } } else { $src = $this->value?$this->realUrl($this->value):$this->_defaultImg; } if(!empty($this->containerClass)&&$this->containerClass=='upltu')//美化后的 { $displayStr = $src==''?' display:none; ':''; $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $html.='
'.Html::tag('em', '', ['class' =>$this->delIconClass.' delImage3']).'
'; $this->insertMobileThumbJs($uploadId,$attachment); } else { $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $html.='
'.Html::tag('em', 'x', ['class' => 'close delImage']).'
'; $this->insertMobileThumbJs($uploadId,$attachment); } return $html; } else if($this->_config['uploadType']==4||$this->_config['uploadType']==5||$this->_config['uploadType']==6)//封面图 { if(!empty($this->_config['defaultImage'])) { $this->_defaultImg = $this->_config['defaultImage']; } else { $this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png'; } if($this->_config['uploadType']==6)$this->_defaultImg = ''; $this->_config['defaultImage'] = $this->_defaultImg; $value = $this->hasModel()?$model->$attribute:$this->value; $attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one(); $uploadId = $this->id; //图片 $src = $this->_defaultImg; if ($this->hasModel()) { if (($value = $model->$attribute)) { $src = $this->realUrl($value); } } else { $src = $this->value?$this->realUrl($this->value):$this->_defaultImg; } if($this->helpTips) { $helptips = Html::tag('div', $this->helpTips, ['class' =>"helptips"]); } if($this->_config['uploadType']==6) { $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $buttonStr = Html::button('',array_merge($this->chooseButtonClass)); $displayStr = $src==''?' display:none; ':''; $html.='
'.$buttonStr.'
'; } else { $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $html.='
'.Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass).'
'.$helptips.'
'; } if($this->_config['uploadType']==5||$this->_config['uploadType']==6) { $this->insertPcPicJs($uploadId,$attachment); } else { $this->insertMobileThumbJs($uploadId,$attachment); } return $html; } else if($this->_config['uploadType']==88) { $value = $this->hasModel()?$model->$attribute:$this->value; $attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($value)."'")->asArray()->one(); $uploadId = $this->id; $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $html.='

点击上传文件

'; $this->insertDocJs($uploadId,$attachment); return $html; } else { $eles[] = Html::tag('div', Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass), ['class' => $this->_config['buttonDivClass']?$this->_config['buttonDivClass'].' button-block-'.$this->_config['uploadType']:'button-block button-block-'.$this->_config['uploadType']]); return Html::tag('div', implode("\n", $eles), ['class' => $this->chooseFileBlockClass?$this->chooseFileBlockClass:'choosefile-block']); } } /** * render html body-input-multi */ public function renderMultiInput ($model=null, $attribute=null) { Html::addCssClass($this->chooseButtonClass, " {$this->_hashVar}"); $eles = []; //$eles[] = Html::tag('div',Html::textInput($attribute, null, ['class' => 'layui-input', 'readonly' => 'readonly']), ['class' => 'layui-input-inline']); $inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name; $eles[] = Html::hiddenInput($inputName, null); if($this->_config['uploadType']==8)//H5多图 { $imgstr = ''; $value = $this->hasModel()?$model->$attribute:$this->value; if(!empty($value)) { $files = explode(",",$value); if(is_array($files))foreach($files as $k=>$file) { $imgstr .= '
x
'; $attachments[] = \app\modules\admin\models\Attachment::find()->where("hash = '".md5($file)."'")->asArray()->one(); } } $html = Html::tag('div', implode("\n", $eles), ['class' => '']); $uploadId = $this->id; $html.='
'.Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass).'
'.$imgstr.'
'; $this->insertMobilePicJs($inputName,$uploadId,$attachments); return $html; } //上传多个文档 else if($this->_config['uploadType']==99) { $uploadId = $this->id; $fileTypeList = explode(",",$this->_config['accept']['extensions']); $fileTypes = []; if(is_array($fileTypeList))foreach($fileTypeList as $fileext){ $fileTypes[]= $fileext; } $limitStr = $this->_config['formData']['init_limit_day']?'今日还可上传'.$this->_config['formData']['upload_limit_day'].'个,':''; $html = ''; $html.='

点击上传文件

按住Ctrl可选中多个同时上传;一次最多能添加'.$this->_config['fileNumLimit'].'个

'.$limitStr.'单个文件不超过'.($this->_config['fileSingleSizeLimit']/(1024*1024)).'MB

支持拓展名:'.join(" ",$fileTypes).'等

'; $this->insertMultiDocJs($uploadId); return $html; } else { $eles[] = Html::tag('div', Html::button($this->_config['buttonTxt']?$this->_config['buttonTxt']:'选择图片', $this->chooseButtonClass), ['class' => $this->_config['buttonDivClass']?$this->_config['buttonDivClass']:'button-block']); return Html::tag('div', implode("\n", $eles), ['class' =>$this->chooseFileBlockClass?$this->chooseFileBlockClass:'choosefile-block']); } } /** * render html body-image */ public function renderSingleImage ($model=null, $attribute=null) { if(!empty($this->_config['defaultImage'])) { $this->_defaultImg = $this->_config['defaultImage']; } else { $this->_defaultImg = $this->assetsUrl.'/webuploader/nopic.png'; } $src = $this->_defaultImg; $eles = []; if ($this->hasModel()) { if (($value = $model->$attribute)) { $src = $this->realUrl($value); } } else { $src = $this->value?$this->realUrl($this->value):$this->_defaultImg; } $eles[] = Html::img($src, ['class' => 'img-thumbnail']); $eles[] = Html::tag('em', 'x', ['class' => 'close delImage']); if(!empty($this->helpTips)) { $eles[] = Html::tag('div', $this->helpTips, ['class' =>"helptips"]); } return Html::tag('div', implode("\n", $eles), ['class' =>"uploadertype-".$this->_config['uploadType']." ".$this->_fixImgClass,'style'=>$this->fixStyle]); } /** * render html body-image */ public function renderSingleFile ($model=null, $attribute=null) { if ($this->hasModel()) { $relValue = $model->$attribute; $value = $this->realUrl($relValue); } else { $relValue = $this->value; $value = $this->realUrl($this->value); } $eles = []; if($value) { $attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($relValue)."'")->asArray()->one(); $eles[] = Html::tag('div',"".$attachment?$attachment['file_name']:basename($value)."", ['class' => 'uploader-unit-file-name']); $eles[] = Html::tag('em', 'x', ['class' => 'close delMultiFile', 'title' => '删除']); } return Html::tag('div', '
'.implode("\n", $eles).'
', ['class' => 'uploader-file-list uploadertype-'.$this->_config['uploadType'].' '.$this->_fixImgClass,'style'=>$this->fixStyle]); } public function renderMobileAvatar ($model=null, $attribute=null) { if ($this->hasModel()) { $value = $model->$attribute; $value = $this->realUrl($value); } else { $value = $this->realUrl($this->value); } if($value) { } return ''; } /** * render html body-image */ public function renderMobileThumb ($model=null, $attribute=null) { if ($this->hasModel()) { $value = $model->$attribute; $value = $this->realUrl($value); } else { $value = $this->realUrl($this->value); } if($value) { } return ''; } /** * render html body-image */ public function renderSingleUpload($model=null, $attribute=null) { if ($this->hasModel()) { $value = $model->$attribute; $value = $this->realUrl($value); } else { $value = $this->realUrl($this->value); } return ''; } public function renderMultidoc($model=null, $attribute=null) { return ''; } /** * render html body-image-muitl */ public function renderMultiImage ($model=null, $attribute=null) { /** * @var $srcTmp like this: src1,src2...srcxxx */ $srcTmp = $this->hasModel()?$model->$attribute:$this->value; $items = []; if ($srcTmp) { is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp); $inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name; foreach ($srcTmp as $k => $v) { $dv = $this->realUrl($v); $src = $v ? $dv : $this->_defaultImg; $eles = []; $eles[] = Html::img($src, ['class' => 'img-responsive img-thumbnail cus-img']); $eles[] = Html::hiddenInput($inputName . "[]", $v); $eles[] = Html::tag('em', 'x', ['class' => 'close delMultiImage', 'title' => '删除']); $items[] = Html::tag('div', implode("\n", $eles), ['class' => 'multi-item']); } } return Html::tag('div', implode("\n", $items), ['class' => 'uploadertype-'.$this->_config['uploadType'].' multi-img-details'.' '. $this->_fixImgClass]); } /** * render html body-image-muitl */ public function renderMobMultiImage ($model=null, $attribute=null) { /** * @var $srcTmp like this: src1,src2...srcxxx */ $srcTmp = $this->hasModel()?$model->$attribute:$this->value; $items = []; if ($srcTmp) { is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp); $inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name; foreach ($srcTmp as $k => $v) { $dv = $this->realUrl($v); $src = $v ? $dv : $this->_defaultImg; $eles = []; $eles[] = Html::img($src, ['class' => 'img-responsive img-thumbnail cus-img']); $eles[] = Html::hiddenInput($inputName . "[]", $v); $eles[] = Html::tag('em', 'x', ['class' => 'close delMultiImage', 'title' => '删除']); $items[] = Html::tag('div', implode("\n", $eles), ['class' => 'multi-item']); } } return Html::tag('div', implode("\n", $items), ['class' => 'input-group multi-img-details'.' '. $this->_fixImgClass]); } /** * render html body-image-muitl */ public function renderMultiFile ($model=null, $attribute=null) { /** * @var $srcTmp like this: src1,src2...srcxxx */ $srcTmp = $this->hasModel()?$model->$attribute:$this->value; $items = []; if ($srcTmp) { is_string($srcTmp) && $srcTmp = explode(Yii::$app->params['webuploader']['delimiter'], $srcTmp); $inputName = $this->hasModel()?Html::getInputName($model, $attribute):$this->name; foreach ($srcTmp as $k => $v) { $dv = $this->realUrl($v); $attachment = \app\modules\admin\models\Attachment::find()->where("hash='".md5($v)."'")->asArray()->one(); $eles = []; $eles[] = Html::tag('div',"".$attachment?$attachment['file_name']:basename($v)."", ['class' => 'uploader-unit-file-name']); $eles[] = Html::hiddenInput($inputName . "[]", $v); $eles[] = Html::tag('em', 'x', ['class' => 'close delMultiFile', 'title' => '删除']); $items[] = Html::tag('div', implode("\n", $eles), ['class' => 'uploader-file-item']); } } return Html::tag('div', implode("\n", $items), ['class' => 'uploadertype-'.$this->_config['uploadType'].' uploader-file-list'.' '. $this->_fixImgClass,'style'=>$this->fixStyle]); } //封面图 public function insertMobileThumbJs($uploadId,$attachment=null) { $config = Json::htmlEncode($this->_config); if(!empty($attachment['file_path'])){ $attachment['file_path'] = $this->realUrl($attachment['file_path']); } else { $attachment = null; } $attachment = Json::htmlEncode($attachment); $js = <<0){ uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); return; } $(".upload-box-{$uploadId} img").attr('src',loadimg); uploader_{$uploadId}.upload(); }); //上传出错 uploader_{$uploadId}.on('uploadError', function (file, reason) { layer_mobile.open({content: "文件[" + file.name + "]上传失败,原因:" + reason,time: 2}); }); uploader_{$uploadId}.on( 'error', function( code ) { var msg = code; switch (code) { case 'Q_EXCEED_NUM_LIMIT': msg = '添加的文件数量超出 fileNumLimit 的设置'; break; case 'Q_EXCEED_SIZE_LIMIT': msg = '添加的文件总大小超出了 fileSizeLimit 的设置'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'F_EXCEED_SIZE': msg = '文件超出大小限制'; break; } layer_mobile.open({content: msg,skin: 'msg',time: 2 }); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) { if(response.code==1) { uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); layer_mobile.open({content: response.msg,skin: 'msg',time: 2 }); return; } if(response.attachment=='') { uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); layer_mobile.open({content:'上传出错,请联系管理员',skin: 'msg',time: 2 }); return; } uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(response.attachment); $(".upload-box-{$uploadId} img").attr('src',response.url); if($("#img_box_{$uploadId}").length>0)$("#img_box_{$uploadId}").show(); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader_{$uploadId}.on( 'uploadComplete', function( file ) { }); //初始化已经存在的文件 uploader_{$uploadId}.on( 'ready', function( ) { if(existfile_{$uploadId}==null)return; getFileObject(existfile_{$uploadId}.file_path, function (fileObject) { var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject); var file = new WebUploader.File(wuFile); file.name = existfile_{$uploadId}.file_name; file.attachment_id = existfile_{$uploadId}.a_id; file.file_path = existfile_{$uploadId}.file_path; uploader_{$uploadId}.options.auto = false; uploader_{$uploadId}.addFile(file); existfile_{$uploadId} = null; //初始状态 $('.upload-box-{$uploadId} .doc-delete').on('click', function(){ uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(''); }) }) }) }) //下面是编辑图片时候用到 var getFileBlob = function (url, cb) { var xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.responseType = "blob"; xhr.addEventListener('load', function() { cb(xhr.response); }); xhr.send(); }; var blobToFile = function (blob, name) { blob.lastModifiedDate = new Date(); blob.name = name; return blob; }; var getFileObject = function(filePathOrUrl, cb) { getFileBlob(filePathOrUrl, function (blob) { cb(blobToFile(blob, filePathOrUrl)); }); }; JS; $this->_view->registerJs($js); } //多图(移动端) public function insertMobilePicJs($inputName,$uploadId,$attachments=null) { $config = Json::htmlEncode($this->_config); if(!empty($attachments)) { for($i=0;$irealUrl($attachments[$i]['file_path']); } } } else { $attachments = null; } ; $attachments = Json::htmlEncode($attachments); $js = <<0){ uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); return; } loading = layer_mobile.open({type: 2,time:2,content: '上传中...'}); uploader_{$uploadId}.upload(); }); //上传出错 uploader_{$uploadId}.on('uploadError', function (file, reason) { layer_mobile.open({ content: "文件[" + file.name + "]上传失败,原因:" + reason ,time: 2 }); }); uploader_{$uploadId}.on( 'error', function( code ) { var msg = code; switch (code) { case 'Q_EXCEED_NUM_LIMIT': msg = '添加的文件数量超出 fileNumLimit 的设置'; break; case 'Q_EXCEED_SIZE_LIMIT': msg = '添加的文件总大小超出了 fileSizeLimit 的设置'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'F_EXCEED_SIZE': msg = '文件超出大小限制'; break; } layer_mobile.open({content: msg,skin: 'msg',time: 2 }); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) { layer_mobile.close(loading); if(response.code==1) { uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); layer_mobile.open({content: response.msg,skin: 'msg',time: 2 }); return; } if(response.attachment=='') { uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); layer_mobile.open({content: '上传出错,请联系管理员',skin: 'msg',time: 2 }); return; } uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".upload-box-{$uploadId} .img-box").append("
x
"); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader_{$uploadId}.on( 'uploadComplete', function( file ) { }); //初始化已经存在的文件 uploader_{$uploadId}.on( 'ready', function( ) { if(existfile_{$uploadId}==null||existfile_{$uploadId}[0]==null)return; var k=0; for(var i=0;i_view->registerJs($js); } //单张大图(PC端) public function insertPcPicJs($uploadId,$attachment=null) { $config = Json::htmlEncode($this->_config); if(!empty($attachment['file_path'])){ $attachment['file_path'] = $this->realUrl($attachment['file_path']); } else { $attachment = null; } $attachment = Json::htmlEncode($attachment); $js = <<0){ uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); return; } $(".upload-box-{$uploadId} img").attr('src',loadimg); $(".upload-box-{$uploadId} img").parent().addClass('loading').show(); uploader_{$uploadId}.upload(); }); //上传出错 uploader_{$uploadId}.on('uploadError', function (file, reason) { layer.msg("文件[" + file.name + "]上传失败,原因:" + reason,{time: 3000}); }); uploader_{$uploadId}.on( 'error', function( code ) { var msg = code; switch (code) { case 'Q_EXCEED_NUM_LIMIT': msg = '添加的文件数量超出 fileNumLimit 的设置'; break; case 'Q_EXCEED_SIZE_LIMIT': msg = '添加的文件总大小超出了 fileSizeLimit 的设置'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'F_EXCEED_SIZE': msg = '文件超出大小限制'; break; } layer.msg(msg,{time: 2000}); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) { if(response.code==1) { uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); layer.msg(response.msg,{time: 2000}); return; } if(response.attachment=='') { uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); layer.msg('上传出错,请联系管理员',{time: 2000}); return; } uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(response.attachment); $(".upload-box-{$uploadId} img").attr('src',response.url); if($("#img_box_{$uploadId}").length>0)$("#img_box_{$uploadId}").show(); $(".upload-box-{$uploadId} img").parent().removeClass('loading'); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader_{$uploadId}.on( 'uploadComplete', function( file ) { }); //初始化已经存在的文件 uploader_{$uploadId}.on( 'ready', function( ) { if(existfile_{$uploadId}==null)return; getFileObject(existfile_{$uploadId}.file_path, function (fileObject) { var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject); var file = new WebUploader.File(wuFile); file.name = existfile_{$uploadId}.file_name; file.attachment_id = existfile_{$uploadId}.a_id; file.file_path = existfile_{$uploadId}.file_path; uploader_{$uploadId}.options.auto = false; uploader_{$uploadId}.addFile(file); existfile_{$uploadId} = null; //初始状态 $('.upload-box-{$uploadId} .doc-delete').on('click', function(){ uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(''); }) }) }) }) //下面是编辑图片时候用到 var getFileBlob = function (url, cb) { var xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.responseType = "blob"; xhr.addEventListener('load', function() { cb(xhr.response); }); xhr.send(); }; var blobToFile = function (blob, name) { blob.lastModifiedDate = new Date(); blob.name = name; return blob; }; var getFileObject = function(filePathOrUrl, cb) { getFileBlob(filePathOrUrl, function (blob) { cb(blobToFile(blob, filePathOrUrl)); }); }; JS; $this->_view->registerJs($js); } //单个文档上传 public function insertDocJs($uploadId,$attachment=null) { $config = Json::htmlEncode($this->_config); if(!empty($attachment['file_path'])){ $attachment['file_path'] = $this->realUrl($attachment['file_path']); } else { $attachment = null; } $attachment = Json::htmlEncode($attachment); $js = <<0){ uploader_{$uploadId}.removeFile(file, true); message('你已经达到今天上传数量上限,请明天再来!'); return false; } }); // 当有文件添加进队列 uploader_{$uploadId}.on( 'fileQueued', function( file ) { if(existfile_{$uploadId}!=null)return; var title = file.name.replace("."+file.ext,""); this.md5File(file).then(function (md5) { $.get(config_{$uploadId}.md5checkUrl+"?md5=" + md5+"&title="+title, function (data) { if (data.error == 0) { file.md5 = md5; file.title = title; uploader_{$uploadId}.upload(); } else if (data.error == 1||data.error == 2) { layer.confirm(data.msg, { btn: ['知道了'] //按钮 }, function(index){ uploader_{$uploadId}.removeFile(file, true); layer.close(index); }, function(index){ uploader_{$uploadId}.removeFile(file, true); layer.close(index); }); } }); }); }); uploader_{$uploadId}.on('uploadProgress', function (file, percent) { percent = parseInt(percent); $(".upload-box-{$uploadId} .rings").css({'width':percent * 100 + '%'}); $(".upload-box-{$uploadId} .ringstxt").text(percent * 100 + '%'); $(".upload-box-{$uploadId} .uploadtip_txt").text('上传中(' + parseInt(percent * 100) + '%' + ")"); }); uploader_{$uploadId}.on('uploadError', function (file, reason) { layer.confirm("文件[" + file.name + "]上传失败,原因:" + reason, { btn: ['确定'] //按钮 }, function(){ uploader_{$uploadId}.removeFile(file, true); }); }); uploader_{$uploadId}.on( 'error', function( code ) { var msg = code; switch (code) { case 'Q_EXCEED_NUM_LIMIT': msg = '添加的文件数量超出 fileNumLimit 的设置'; break; case 'Q_EXCEED_SIZE_LIMIT': msg = '添加的文件总大小超出了 fileSizeLimit 的设置'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'F_EXCEED_SIZE': msg = '文件超出大小限制'; break; } message(msg); }); uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) { if(response.code==1) { $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); $(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件"); $(".upload-box-{$uploadId} .upload_status_txt").html(''); uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); message(response.msg); return; } else { $(".upload-box-{$uploadId} .upload_status_txt").html(""); $('.upload-box-{$uploadId} .doc-delete').on('click', function(){ $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); $(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件"); $(".upload-box-{$uploadId} .upload_status_txt").html(''); uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(''); }) if(response.attachment=='') { $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); $(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件"); $(".upload-box-{$uploadId} .upload_status_txt").html(''); uploader_{$uploadId}.removeFile( file ); $(".input-{$uploadId}").val(''); $('#'+file.id).remove(); message('上传出错,请联系管理员'); return; } else { $(".upload-box-{$uploadId} .uploadtip_txt").html("已上传"); $(".input-{$uploadId}").val(response.attachment); if(file.ext=='zip'||file.ext=='rar') { $('#thumbbox').show(); $('#editorbox').show(); $('#maininfo').removeClass('col-md-12').addClass('col-md-8'); } else if(file.ext=='mp4'||file.ext=='flv'||file.ext=='wmv'||file.ext=='mp3') { $('#thumbbox').show(); $('#editorbox').hide(); $('#maininfo').removeClass('col-md-12').addClass('col-md-8'); } else { $('#thumbbox').hide(); $('#editorbox').hide(); $('#maininfo').removeClass('col-md-8').addClass('col-md-12'); } $('#doc-md5').val(file.md5); $('#doc-ext').val(file.ext); $('#doc-filesize').val(file.size); $('#doc-title').val(file.title); if($('#auto_get_tags').length>0){ $('#auto_get_tags').click();} } } }); // 完成上传完了,成功或者失败,先删除进度条。 uploader_{$uploadId}.on( 'uploadComplete', function( file ) { }); //初始化已经存在的文件 uploader_{$uploadId}.on( 'ready', function( ) { if(existfile_{$uploadId}==null)return; getFileObject(existfile_{$uploadId}.file_path, function (fileObject) { var wuFile = new WebUploader.Lib.File(WebUploader.guid('rt_'),fileObject); var file = new WebUploader.File(wuFile); file.name = existfile_{$uploadId}.file_name; file.attachment_id = existfile_{$uploadId}.a_id; uploader_{$uploadId}.options.auto = false; uploader_{$uploadId}.addFile(file); existfile_{$uploadId} = null; //初始状态 $(".upload-box-{$uploadId} .rings").css({'width':100 + '%'}); $(".upload-box-{$uploadId} .ringstxt").text( 100 + '%'); $(".upload-box-{$uploadId} .uploadtip_txt").text('已上传'); $(".upload-box-{$uploadId} .upload_status_txt").html(""); $('.upload-box-{$uploadId} .doc-delete').on('click', function(){ $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); $(".upload-box-{$uploadId} .uploadtip_txt").html("点击上传文件"); $(".upload-box-{$uploadId} .upload_status_txt").html(''); uploader_{$uploadId}.removeFile( file ); $('#'+file.id).remove(); $(".input-{$uploadId}").val(''); }) }) }) }) //下面是编辑图片时候用到 var getFileBlob = function (url, cb) { var xhr = new XMLHttpRequest(); xhr.open("GET", url); xhr.responseType = "blob"; xhr.addEventListener('load', function() { cb(xhr.response); }); xhr.send(); }; var blobToFile = function (blob, name) { blob.lastModifiedDate = new Date(); blob.name = name; return blob; }; var getFileObject = function(filePathOrUrl, cb) { getFileBlob(filePathOrUrl, function (blob) { cb(blobToFile(blob, filePathOrUrl)); }); }; JS; $this->_view->registerJs($js); } //文档批量上传 public function insertMultiDocJs($uploadId) { $config = Json::htmlEncode($this->_config); $js = <<0&&$('#doc-ext_type_1').val()=='')||($('#doc-ext_type_2').length>0&&$('#doc-ext_type_2').val()=='')||($('#doc-ext_type_3').length>0&&$('#doc-ext_type_3').val()=='')||($('#doc-ext_type_4').length>0&&$('#doc-ext_type_4').val()=='')||($('#doc-ext_type_5').length>0&&$('#doc-ext_type_5').val()=='')) { message('请完善栏目扩展属性'); return false; } if(uploader_{$uploadId}.options.formData.upload_limit_day<=0&&uploader_{$uploadId}.options.formData.init_limit_day>0){ uploader_{$uploadId}.removeFile(file, true); message('你已经达到今天上传数量上限,请明天再来!'); return false; } file.cat_id = $('#cat_id').val(); file.cat_name = $('#cat_tit').text(); file.coin_price = $('#doc-coin_price').val(); file.title = file.name.replace("."+file.ext,""); file.iconfont = 'icon-'+file.ext; if(file.ext=='doc'||file.ext=='docx') { file.iconfont = 'icon-file-doc-fill'; } if(file.ext=='ppt'||file.ext=='pptx') { file.iconfont = 'icon-file-ppt-fill'; } if(file.ext=='xls'||file.ext=='xlsx') { file.iconfont = 'icon-file-excel-fill'; } if(file.ext=='zip'||file.ext=='rar') { file.iconfont = 'icon-wenjian_yasuobao'; } if(file.ext=='pdf') { file.iconfont = 'icon-file-pdf-fill'; } if($('#doc-ext_type_1').val()!=''&&$('#doc-ext_type_1').length>0){ file.ext_type_1 = $('#doc-ext_type_1').val(); } if($('#doc-ext_type_2').val()!=''&&$('#doc-ext_type_2').length>0){ file.ext_type_2 = $('#doc-ext_type_2').val(); } if($('#doc-ext_type_3').val()!=''&&$('#doc-ext_type_3').length>0){ file.ext_type_3 = $('#doc-ext_type_3').val(); } if($('#doc-ext_type_4').val()!=''&&$('#doc-ext_type_4').length>0){ file.ext_type_4 = $('#doc-ext_type_4').val(); } if($('#doc-ext_type_5').val()!=''&&$('#doc-ext_type_5').length>0){ file.ext_type_5 = $('#doc-ext_type_5').val(); } }); // 文件添加进队列 uploader_{$uploadId}.on( 'fileQueued', function( file ) { this.md5File(file).then(function (md5) { file.md5 = md5; $.get(config_{$uploadId}.md5checkUrl+"?md5=" + md5 +"&title="+file.title, function (data) { if (data.error == 0) { var html = '
  • '; html += '
    .'+file.ext+'
    '; html += '
    '; html += '
    '+file.cat_name+'
    '; html += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; html += '
    '+formatBytes(file.size)+'
    '; html += '
  • '; $(".waitlist").append(html); $('#waitnum').text($('.waitlist li').length); //从队列删除文件 $(document).on("click", ".delitem", function(){ var files = uploader_{$uploadId}.getFiles(); for(var i in files) { if(files[i].id==$(this).data('fileid')){ uploader_{$uploadId}.removeFile(files[i], true); } } $(this).parent().parent().remove(); resetStatus(); }) uploader_{$uploadId}.upload(file); } else if (data.error == 1) {//不可上传 var errorHtml = '
  • '; errorHtml += '
    .'+file.ext+'
    '; errorHtml += '
    '; errorHtml += '
    '+file.cat_name+'
    '; errorHtml += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; errorHtml += '
    '+formatBytes(file.size)+'
    '; errorHtml += '
    移除

    '+data.msg+'

  • '; $(".errorlist").append(errorHtml); $('#errornum').text($('.errorlist li').length); uploader_{$uploadId}.removeFile(file, true); //从队列删除文件 $(document).on("click", ".moveitem", function(){ $(this).parent().parent().remove(); resetStatus(); }) } else if(data.error==2){//修改标题后可以传 var edithtml = '
  • '; edithtml += '
    .'+file.ext+'
    '; edithtml += '
    待修改 | 继续上传
    '; edithtml += '
    '+file.cat_name+'
    '; edithtml += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; edithtml += '
    '+formatBytes(file.size)+'
    '; edithtml += '
    编辑移除

    '+data.msg+'

  • '; $(".editlist").append(edithtml); //从队列删除文件 $(document).on("click", ".delitem", function(){ var files = uploader_{$uploadId}.getFiles(); for(var i in files) { if(files[i].id==$(this).data('fileid')) {uploader_{$uploadId}.removeFile(files[i], true)}; } $(this).parent().parent().remove(); resetStatus(); }) $(document).on("click", ".goonupload", function(){ if($(this).data('lock')==1) { message('请修改标题后上传'); return; } var title = $("#li_"+$(this).data('fileid')+" .doctit").val(); var files = uploader_{$uploadId}.getFiles(); for(var i in files) { if(files[i].id==$(this).data('fileid')) { files[i].title = title; uploader_{$uploadId}.upload(files[i]); } } }) } resetStatus(); }); }); }); uploader_{$uploadId}.on('uploadProgress', function (file, percent) { percent = parseInt(percent); $(".upload-box-{$uploadId} .rings").css({'width':percent * 100 + '%'}); $(".upload-box-{$uploadId} .ringstxt").text(percent * 100 + '%'); }); uploader_{$uploadId}.on('uploadError', function (file, reason) { layer.confirm("文件[" + file.name + "]上传失败,原因:" + reason, { btn: ['确定'] //按钮 }, function(){ }); }); uploader_{$uploadId}.on( 'error', function( code ) { var msg = code; switch (code) { case 'Q_EXCEED_NUM_LIMIT': msg = '队列中的文件数量超出上限'; break; case 'Q_EXCEED_SIZE_LIMIT': msg = '队列中的文件总大小超出上限'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'Q_TYPE_DENIED': msg = '添加的文件类型错误'; break; case 'F_EXCEED_SIZE': msg = '文件超出大小限制'; break; } message(msg); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader_{$uploadId}.on( 'uploadSuccess', function( file,response ) { $('#waitnum').text($('.waitlist li').length); if(response.code==1) { var html = '
  • '; html += '
    .'+file.ext+'
    '; html += '
    '; html += '
    '+file.cat_name+'
    '; html += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; html += '
    '+formatBytes(file.size)+'
    '; html += '
    移除

    '+response.msg+'

  • '; $(".faillist").append(html); uploader_{$uploadId}.removeFile( file ); $('#li_'+file.id).remove(); resetStatus(); $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); return; } else { if(response.attachment=='') { var html = '
  • '; html += '
    .'+file.ext+'
    '; html += '
    '; html += '
    '+file.cat_name+'
    '; html += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; html += '
    '+formatBytes(file.size)+'
    '; html += '
    移除

    上传出错,请联系管理员

  • '; $(".faillist").append(html); $('#failnum').text($('.faillist li').length); uploader_{$uploadId}.removeFile( file ); $('#li_'+file.id).remove(); //从队列删除文件 $(document).on("click", ".removeFailItem", function(){ $(this).parent().parent().remove(); resetStatus(); $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); }) return; } else { if(uploader_{$uploadId}.options.formData.upload_limit_day<=0&&uploader_{$uploadId}.options.formData.init_limit_day>0){ var files = uploader_{$uploadId}.getFiles(); for(var i in files) { uploader_{$uploadId}.cancelFile(files[i]); } $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); message('你已经达到今天上传数量上限,请明天再来!'); return false; } //var loading = commonLoading(); var postData = {'Doc[title]':file.title,'Doc[md5]':file.md5,'Doc[ext]':file.ext,'Doc[filesize]':file.size,'cat_id':file.cat_id,'Doc[ext_type_1]':file.ext_type_1,'Doc[ext_type_2]':file.ext_type_2,'Doc[ext_type_3]':file.ext_type_3,'Doc[ext_type_4]':file.ext_type_4,'Doc[ext_type_5]':file.ext_type_5,'DocData[file]':response.attachment,'Doc[coin_price]':file.coin_price} $.ajax({ type: "POST", async : false, url:api_url+"upload/multi", data:$.extend(postData, {request_from:request_from}), headers: {'Authorization': 'Bearer '+access_token}, success: function (res) { //layer.close(loading); if(res.error==0) { if(uploader_{$uploadId}.options.formData.upload_limit_day>0) { uploader_{$uploadId}.options.formData.upload_limit_day = uploader_{$uploadId}.options.formData.upload_limit_day-1; $('#restnum,#bottomnum').text(uploader_{$uploadId}.options.formData.upload_limit_day); } var html = '
  • '; html += '
    .'+file.ext+'
    '; html += '
    '; html += '
    '+file.cat_name+'
    '; html += '
    '+uploader_{$uploadId}.options.formData.coin_name+':
    '; html += '
    '+formatBytes(file.size)+'
    '; html += '
  • '; $(".suclist").append(html); uploader_{$uploadId}.removeFile( file ); $('#li_'+file.id).remove(); //从队列删除文件 $(document).on("click", ".removeSucItem", function(){ $(this).parent().parent().remove(); $('#sucnum').text($('.suclist li').length); resetStatus(); }) resetStatus(); $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); } else { uploader_{$uploadId}.removeFile( file ); $('#sucli_'+file.id).remove(); resetStatus(); $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); message(res.msg); } } }); } } $('#waitnum').text($('.waitlist li').length); }); // 完成上传完了,成功或者失败,先删除进度条。 uploader_{$uploadId}.on( 'uploadComplete', function( file ) { $(".batchupload-tab li").eq(1).click(); $(".upload-box-{$uploadId} .rings").css({'width':'0%'}); $(".upload-box-{$uploadId} .ringstxt").text(''); resetStatus(); }); //初始化已经存在的文件 uploader_{$uploadId}.on( 'ready', function( ) { uploader_{$uploadId}.addButton({id: '#continueupload'}); }) }) var formatBytes = function (bytes,decimals) { if(bytes == 0) return '0 Bytes'; var k = 1024, dm = decimals <= 0 ? 0 : decimals || 2, sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; } var resetStatus = function() { if($('.waitlist li').length>0){ $('.waitlist').siblings('.empty').hide(); } if($('.waitlist li').length==0){ $('.waitlist').siblings('.empty').show();} if($('.suclist li').length>0){ $('.suclist').siblings('.empty').hide(); } if($('.suclist li').length==0){ $('.suclist').siblings('.empty').show();} if($('.faillist li').length>0){ $('.faillist').siblings('.empty').hide(); } if($('.faillist li').length==0){ $('.faillist').siblings('.empty').show();} if($('.editlist li').length>0){ $('.editlist').siblings('.empty').hide(); } if($('.editlist li').length==0){ $('.editlist').siblings('.empty').show();} if($('.errorlist li').length>0){ $('.errorlist').siblings('.empty').hide(); } if($('.errorlist li').length==0){ $('.errorlist').siblings('.empty').show();} $('#sucnum').text($('.suclist li').length); $('#editnum').text($('.editlist li').length); $('#failnum').text($('.faillist li').length); $('#waitnum').text($('.waitlist li').length); $('#errornum').text($('.errorlist li').length); } JS; $this->_view->registerJs($js); } /** * validate `$value` is url */ private function _validateUrl ($value) { $pattern = '/^{schemes}:\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])/i'; $validSchemes = ['http', 'https']; $pattern = str_replace('{schemes}', '(' . implode('|', $validSchemes) . ')', $pattern); if (!preg_match($pattern, $value)) { return false; } return true; } //获取文件绝对URL function realUrl($url) { if(empty($url))return ''; if($this->_validateUrl($url)) { return $url; } else { $url = getFileUrl($url); return $url; } } }