亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

yii2.0使用Plupload實現帶縮放功能的多圖上傳

2024-05-04 23:41:17
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了yii2.0使用Plupload實現帶縮放功能的多圖上傳的相關資料,需要的朋友可以參考下
 

本文講解了plupload的相關代碼,實現了ajax多圖同時上傳,然后將圖片進行縮放,最后顯示圖片,分享給大家供大家參考,具體內容如下

1、文章視圖中調用Plupload

<?= /common/widgets/Plupload::widget([ 'model'=>$model, 'attribute'=>'cover_img', 'url'=>'/file/upload',//處理文件上傳控制器])?>

2、/common/widgets/Plupload 組件

<?phpnamespace common/widgets;use backend/assets/UploadAsset;use yii;use yii/helpers/Html;use yii/base/Exception;class Plupload extends yii/bootstrap/Widget{ public $model; public $attribute; public $name; public $url; private $_html; public function init(){  parent::init(); if(!$this->url){ throw new Exception('url參數不能為空'); }  if(!$this->model){   throw new Exception('model屬性不能為空');  }  if(!$this->attribute){   throw new Exception('attribute屬性不能為空');  } } public function run(){  $model = $this->model;  $attribute = $this->attribute;  $path = $model->$attribute?$model->$attribute:"/images/noimage.gif";//顯示文章圖片或者默認圖片  $this->_html.='<div class="form-group field-article-author" id="container">';  $this->_html.=Html::activeLabel($model,$attribute);  $this->_html.=Html::activeHiddenInput($model,$attribute,['id'=>'hidden_input','value'=>$path]);  $this->_html .= '<div id="pickfiles" style="height:50px;min-width:50px;max-width: 300px;overflow: hidden;"><img height="50" src="'.$path.'" /></div>';  $this->_html.='</div> ';  UploadAsset::register($this->view); $this->view->registerJs( '$(function(){    initCoverImageUploader("pickfiles","container","2mb","'.$this->url.'","'.Yii::$app->request->getCsrfToken().'");   });' );  return $this->_html; }}

3、backend/assets/UploadAsset
注冊相關js

<?phpnamespace backend/assets;use yii/web/AssetBundle;class UploadAsset extends AssetBundle{ public $basePath = '@webroot'; public $baseUrl = '@web'; public $css = [ ]; public $js = [  'js/upload.js' ]; public $depends = [  'backend/assets/PluploadAsset', ];}

4、js/upload.js
ajax處理代碼

function initCoverImageUploader(buttonId,contatinerId,maxFileSize,url,csrfToken){ var uploader = new plupload.Uploader({  runtimes : 'html5,flash,silverlight,html4',  browse_button :buttonId, // you can pass an id...  container: contatinerId, // ... or DOM Element itself  url : url,  flash_swf_url : '@vendor/moxiecode/plupload/js/Moxie.swf',  silverlight_xap_url : '@vendor/moxiecode/plupload//js/Moxie.xap',  filters : {   max_file_size : maxFileSize,   mime_types: [    {title : "Image files", extensions : "jpg,gif,png"},    {title : "Zip files", extensions : "zip"}   ]  },  multipart_params:{   '_csrf':csrfToken  },  init: {   FilesAdded: function(up, files) {    uploader.start();   },   UploadProgress: function(up, file) {    $('#'+contatinerId+' p').text('已上傳:'+file.percent+'%');   },   FileUploaded:function (up, file, result) {    result = $.parseJSON(result.response);    if(result.code == 0){     $('#'+buttonId).html('<img src="'+result.path+'" height="50" />');     $('#hidden_input').val(result.path);     //console.log(result.message);    }   },   Error: function(up, err) {    document.getElementById('console').appendChild(document.createTextNode("/nError #" + err.code + ": " + err.message));   }  } }); uploader.init();}

5、backend/assets/PluploadAsset
注冊plupload相關資源

<?phpnamespace backend/assets;use yii/web/AssetBundle;class PluploadAsset extends AssetBundle{ public $sourcePath = '@vendor/moxiecode/plupload'; public $css = [ ]; public $js = [  'js/plupload.full.min.js', ]; public $depends = [  'yii/web/JqueryAsset', ];}

6、FileController
控制器調用模型處理上傳文件,并且返回結果

class FileController extends BaseController{ public function actionUpload(){  Yii::$app->response->format=Response::FORMAT_JSON;  $model = New ImageUpload();  $model->fileInputName = 'file';  if($model->save()){   return ['code'=>0,'message'=>$model->getMessage(),'path'=>$model->getUrlPath()];  }else{   return ['code'=>1,'message'=>$model->getMessage()];  } }}

7、common/models/ImageUpload
模型中對上傳文件做了一定的檢測,然后將源文件按照一定的比例進行縮放

<?phpnamespace common/models;use yii/base/Exception;use yii/helpers/FileHelper;use yii/web/UploadedFile;class ImageUpload extends /yii/base/Object{ public $fileInputName = 'file';//上傳表單 file name public $savePath ;//圖像保存根位置 public $allowExt = ['jpg','png','jpeg','gif','bmp'];//允許上傳后綴 public $maxFileSize=1024100000;//最大大小 public $allowType = ['image/jpeg','image/bmp','image/gif','image/png','image/pjpeg','image/bmp','image/gif','image/x-png','image/pjpeg','image/bmp', 'image/gif' ,'image/x-png','image/pjpeg','image/bmp','image/gif','image/x-png']; private $_uploadFile;//上傳文件 private $filePath;//文件路徑 private $urlPath;//訪問路徑 private $res=false;//返回狀態 private $message;//返回信息 public function getMessage(){  return $this->message; } public function getUrlPath(){  return $this->urlPath; } public function init(){  if(!$this->fileInputName) throw new Exception('fileInputName屬性不能為空');  if(!$this->savePath) $this->savePath = /Yii::$app->basePath.'/web/uploads/images';  $this->savePath = rtrim($this->savePath,'/');  if(!file_exists($this->savePath)){   if(! FileHelper::createDirectory($this->savePath)){    $this->message = '沒有權限創建'.$this->savePath;    return false;   }  }  $this->_uploadFile = UploadedFile::getInstanceByName($this->fileInputName);  if(!$this->_uploadFile){   $this->message = '沒有找到上傳文件';   return false;  }  if($this->_uploadFile->error){   $this->message = '上傳失敗';   return false;  }  if(!in_array($this->extension,$this->allowExt) || !in_array($this->type,$this->allowType)){   $this->message = '該文件類型不允許上傳';   return false;  }  if($this->_uploadFile->size> $this->maxFileSize){   $this->message = '文件過大';   return false;  }  $path = date('Y-m',time());  if(!file_exists($this->savePath.'/'.$path)){   FileHelper::createDirectory($this->savePath.'/'.$path);  }  $name = substr(/Yii::$app->security->generateRandomString(),-4,4);  $this->filePath = $this->savePath.'/'.$path.'/'.$this->baseName.'--'.$name.'.'.$this->extension;  $this->urlPath = '/uploads/images/'.$path.'/'.$this->baseName.'--'.$name.'.'.$this->extension; } public function save(){  if($this->_uploadFile->saveAs($this->filePath)){   $this->CreateThumbnail($this->filePath);//縮放圖片   $this->res = true;  }else{   $this->res = false;  }  if($this->res){   $this->message = $this->_uploadFile->baseName.'.'.$this->_uploadFile->extension.'上傳成功';  }else{   $this->message = $this->_uploadFile->baseName.'.'.$this->_uploadFile->extension.'上傳失敗';  }  return $this->res; } /**  * 獲取文件名字  * @return null  */ public function getBaseName(){  if($this->_uploadFile){   return $this->_uploadFile->baseName;  }else{   return null;  } } /**  * 返回文件后綴  * @return null  */ public function getExtension(){  if($this->_uploadFile){   return $this->_uploadFile->extension;  }else{   return null;  } } /**  * 返回文件類型  * @return mixed  */ public function getType(){  if($this->_uploadFile){   return $this->_uploadFile->type;  }  return null; } /**  * 生成保持原圖縱橫比的縮略圖,支持.png .jpg .gif  * 縮略圖類型統一為.png格式  * $srcFile  原圖像文件名稱  * $toFile  縮略圖文件名稱,為空覆蓋原圖像文件  * $toW   縮略圖寬  * $toH   縮略圖高  * @return bool  */ public static function CreateThumbnail($srcFile, $toFile="", $toW=100, $toH=100) {  if ($toFile == "") $toFile = $srcFile;  $data = getimagesize($srcFile);//返回含有4個單元的數組,0-寬,1-高,2-圖像類型,3-寬高的文本描述。  if (!$data) return false;  //將文件載入到資源變量im中  switch ($data[2]) //1-GIF,2-JPG,3-PNG  {   case 1:    if(!function_exists("imagecreatefromgif")) return false;    $im = imagecreatefromgif($srcFile);    break;   case 2:    if(!function_exists("imagecreatefromjpeg")) return false;    $im = imagecreatefromjpeg($srcFile);    break;   case 3:    if(!function_exists("imagecreatefrompng")) return false;    $im = imagecreatefrompng($srcFile);    break;  }  //計算縮略圖的寬高  $srcW = imagesx($im);  $srcH = imagesy($im);  $toWH = $toW / $toH;  $srcWH = $srcW / $srcH;  if ($toWH <= $srcWH) {   $ftoW = $toW;   $ftoH = (int)($ftoW * ($srcH / $srcW));  } else {   $ftoH = $toH;   $ftoW = (int)($ftoH * ($srcW / $srcH));  }  if (function_exists("imagecreatetruecolor")) {   $ni = imagecreatetruecolor($ftoW, $ftoH); //新建一個真彩色圖像   if ($ni) {    //重采樣拷貝部分圖像并調整大小 可保持較好的清晰度    imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);   } else {    //拷貝部分圖像并調整大小    $ni = imagecreate($ftoW, $ftoH);    imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);   }  } else {   $ni = imagecreate($ftoW, $ftoH);   imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);  }  switch ($data[2]) //1-GIF,2-JPG,3-PNG  {   case 1:    imagegif($ni, $toFile);    break;   case 2:    imagejpeg($ni, $toFile);    break;   case 3:    imagepng($ni, $toFile);    break;  }  ImageDestroy($ni);  ImageDestroy($im);  return $toFile; }}

以上就是本文的全部內容,希望對大家學習php程序設計有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线激情视频| 亚洲自拍欧美另类| 国产精品久久久久99| 欧美肥婆姓交大片| 国产999精品| 久久国产精品久久久久| 成人网欧美在线视频| 国产精品视频网| 国产欧美精品一区二区三区介绍| 欧美老女人性生活| 九色精品美女在线| 亚洲字幕一区二区| 色悠久久久久综合先锋影音下载| 91chinesevideo永久地址| 亚洲人成在线播放| 亚洲日本欧美中文幕| 亚洲精品永久免费精品| 91啪国产在线| 欧美床上激情在线观看| 国产精品极品美女粉嫩高清在线| 韩国精品久久久999| 国产在线视频欧美| 精品福利免费观看| 亚洲性生活视频在线观看| 国产日韩av在线| 超碰97人人做人人爱少妇| 欧美夫妻性生活视频| 成人网欧美在线视频| 日本亚洲欧美三级| 国产精品久久久久久av福利| 亚洲天堂免费在线| 最近更新的2019中文字幕| 国产精品一区二区久久久| 久久香蕉国产线看观看网| 精品视频在线播放| 亚洲欧美变态国产另类| 午夜精品久久久久久久久久久久久| 97国产精品视频人人做人人爱| 亚洲欧洲美洲在线综合| 欧美激情精品久久久久久| 国产欧美日韩中文字幕| 久久免费成人精品视频| 2019中文字幕在线观看| 亚洲久久久久久久久久久| 精品久久久久人成| 久久手机免费视频| 88国产精品欧美一区二区三区| 亚洲国产精彩中文乱码av| 色av中文字幕一区| 亚洲色图av在线| 欧美成人免费全部| 日韩av免费观影| 亚洲天堂免费观看| 欧美视频免费在线观看| 亚洲国产成人精品一区二区| 国产成人久久精品| 国产在线观看一区二区三区| 亚洲综合中文字幕在线| 在线成人激情视频| 国产精品视频成人| 91av免费观看91av精品在线| 国模视频一区二区三区| 亚洲欧洲av一区二区| 国产精品视频久久| 一区二区三区www| 国产精品视频网| 九色成人免费视频| 亚洲精品视频在线播放| 色樱桃影院亚洲精品影院| 国产91ⅴ在线精品免费观看| 亚洲一区二区免费| 亚洲精品欧美日韩专区| 亚洲女人天堂色在线7777| 国产欧美日韩免费| 国产suv精品一区二区三区88区| 亚洲最大成人免费视频| 黑人巨大精品欧美一区二区一视频| 国产女人18毛片水18精品| 深夜福利91大全| 成人精品网站在线观看| 亚洲欧美第一页| 亚洲精品小视频在线观看| 国产91成人在在线播放| 久久久久久久久久久久久久久久久久av| 欧美成人全部免费| 欧美成人免费va影院高清| 欧美精品18videos性欧| 亚洲电影免费观看高清完整版在线| 欧美亚洲午夜视频在线观看| 亚洲成人中文字幕| 岛国av午夜精品| 日韩精品在线免费观看视频| 午夜欧美不卡精品aaaaa| 日韩在线一区二区三区免费视频| 欧美三级欧美成人高清www| 欧美一区二粉嫩精品国产一线天| 国内精品久久久久久影视8| 成人在线视频网| 欧美视频免费在线| 91精品国产乱码久久久久久蜜臀| 欧美精品激情在线观看| 国产精品美女午夜av| 亚洲成人久久久| 日韩欧美一区二区三区| 在线亚洲男人天堂| 国产精品久久久久久久久久小说| 国产精品视频白浆免费视频| 日韩一区二区三区国产| 国产精品视频xxx| 成人黄色激情网| 欧美美最猛性xxxxxx| 中文字幕不卡在线视频极品| 亚洲人成在线电影| 国产一区欧美二区三区| 中文字幕精品一区二区精品| 久久天堂电影网| 91网站在线看| 日韩麻豆第一页| 91精品久久久久久久久| 日韩电影大片中文字幕| 中文字幕国产精品| 色噜噜狠狠色综合网图区| 粗暴蹂躏中文一区二区三区| 黑人狂躁日本妞一区二区三区| 欧美国产日韩一区二区在线观看| 国产成人一区二区三区| 成人美女免费网站视频| 国产精品成av人在线视午夜片| 欧美激情国产高清| 狠狠躁夜夜躁久久躁别揉| 亚洲电影中文字幕| 久久激情五月丁香伊人| 日韩精品在线观看一区二区| www.日韩不卡电影av| 欧美性视频网站| 九九精品在线播放| 91中文字幕一区| 国产精品视频一区国模私拍| 亚洲最大福利网站| 精品亚洲夜色av98在线观看| 欧美最顶级丰满的aⅴ艳星| 欧美日韩性视频在线| 亚洲视频电影图片偷拍一区| 亚洲美女又黄又爽在线观看| 日韩精品免费综合视频在线播放| 国产一区二区三区高清在线观看| 日韩欧美黄色动漫| 亚洲精品美女免费| 浅井舞香一区二区| 国产69精品久久久久久| 精品亚洲一区二区三区| 激情懂色av一区av二区av| 欧美精品久久一区二区| 久久成人这里只有精品| 这里只有精品丝袜| 欧洲日韩成人av| 久久国产精品影视| 欧美成在线视频| 亚洲人成欧美中文字幕| 亚洲美女av在线播放| 欧美性videos高清精品| 欧美一区二区三区免费视| 精品国产乱码久久久久久天美| 国产精品中文字幕久久久|