ImageUploadController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace api\modules\v1\controllers;
  3. use common\library\ImageResize;
  4. use yii\rest\ActiveController;
  5. use common\library\Apireturn;
  6. use yii\helpers\ArrayHelper;
  7. use yii\filters\auth\QueryParamAuth;
  8. use yii;
  9. class ImageUploadController extends ActiveController
  10. {
  11. public $modelClass = 'common\models';
  12. public $types = array('image/bmp' => 'bmp', 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif');
  13. public $imgtype = array('bmp','jpg','png','gif','jpeg');
  14. public $filepath;
  15. public $enableCsrfValidation = false;
  16. public function behaviors()
  17. {
  18. return ArrayHelper::merge(parent::behaviors(), [
  19. 'authenticator' => [
  20. 'class' => QueryParamAuth::className(),
  21. 'tokenParam' => "token",//access-token修改为token
  22. 'optional' => [//不需要认证方法名 array
  23. ],
  24. ]
  25. ]);
  26. }
  27. public function actionUpload()
  28. {
  29. $imgtype = Yii::$app->request->post('imgtype');
  30. if(empty($imgtype))
  31. {
  32. return Apireturn::sent(0,'图片类型不能为空',200);
  33. }
  34. $file= $_FILES;
  35. if(count($file)<=0)
  36. return Apireturn::sent(0,'未上传图片',200);
  37. $url =array();
  38. $folder = "/".$imgtype."/".date("Ym")."/".date("d")."/";
  39. $file_path=\Yii::getAlias('@common/allupload').$folder;
  40. for ($i=0;$i<count($file['imgbase']['name']);$i++)
  41. {
  42. $files['name']=$file['imgbase']['name'][$i];
  43. $files['type']=$file['imgbase']['type'][$i];
  44. $files['tmp_name']=$file['imgbase']['tmp_name'][$i];
  45. $files['error']=$file['imgbase']['error'][$i];
  46. $files['size']=$file['imgbase']['size'][$i];
  47. $result = $this->uploadFile($files,$file_path,2*1024*1024,$this->imgtype);
  48. if(!empty($result['dest'])) {
  49. $res = self::uploadresize($file_path.$result['dest'],$file_path."s_".$result['dest']);
  50. if($res){
  51. $url[] = $folder ."s_". $result['dest'];
  52. }else{
  53. $url[] = $folder . $result['dest'];
  54. }
  55. }
  56. else {
  57. return Apireturn::sent(0, $result['mes'], 200);
  58. }
  59. }
  60. return Apireturn::sent(1,'success',200,$url);
  61. }
  62. public function uploadFile($file,$path='./uploads',$max_size,$allowExt){
  63. $filename=$file['name'];
  64. $type=$file['type'];
  65. $temp_name=$file['tmp_name'];
  66. $error=$file['error'];
  67. $size=$file['size'];
  68. if ($error==UPLOAD_ERR_OK) {
  69. if ($size>$max_size) {
  70. $res['mes']=$filename."文件超过规定上传大小,最多2M";
  71. }
  72. $ext=$this->getExt($filename);
  73. if (!in_array($ext, $allowExt)) {
  74. $res['mes']=$filename.'文件名不合乎规范';
  75. }
  76. // if (!is_uploaded_file($temp_name)) {
  77. // $res['mes']=$filename."文件不是通过HTTP POST 方法上传上传过来的";
  78. // }
  79. if (@$res) {
  80. return $res;
  81. }
  82. if (!file_exists($path)) {
  83. mkdir($path,0777,true);
  84. chmod($path, 0777);
  85. }
  86. $fname=$this->getUniName();
  87. $url =$fname.'.'.$ext;
  88. $destination=$path.'/'.$fname.'.'.$ext;
  89. if (move_uploaded_file($temp_name, $destination)) {
  90. $res['mes']=$filename.'上传成功';
  91. $res['dest']=$url;
  92. }else{
  93. $res['mes']=$filename."文件上传失败";
  94. }
  95. }else{
  96. switch ($error) {
  97. case '1':
  98. $res['mes']="超过了配置文件上传文件的大小";
  99. break;
  100. case '2':
  101. $res['mes']="超过表单设置上传文件文件的大小";
  102. break;
  103. case '3':
  104. $res['mes']="文件部分被上传";
  105. break;
  106. case '4':
  107. $res['mes']="没有文件被上传";
  108. break;
  109. case '6':
  110. $res['mes']="没有找到临时目录";
  111. break;
  112. case '7':
  113. $res['mes']="文件不可写";
  114. break;
  115. default:
  116. $res['mes']="上传文件失败";
  117. break;
  118. }
  119. }
  120. return $res;
  121. }
  122. public function getExt($filename){
  123. $arr=explode('.', basename($filename));
  124. return end($arr);
  125. }
  126. public function getUniName(){
  127. return md5(uniqid(microtime(true),true));
  128. }
  129. /**
  130. * 生成缩略图
  131. * @param $localimg
  132. * @param $remoteimg
  133. * @param int $x
  134. * @param int $y
  135. * @return bool
  136. */
  137. static function uploadresize($localimg,$remoteimg,$x = 400,$y = 400){
  138. $resize = new ImageResize();
  139. $result = $resize->resize($localimg,$remoteimg,$x,$y);
  140. if(!$result){
  141. return false;
  142. }
  143. return true;
  144. }
  145. }