123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- <?php
- namespace api\modules\v1\controllers;
- use common\library\ImageResize;
- use yii\rest\ActiveController;
- use common\library\Apireturn;
- use yii\helpers\ArrayHelper;
- use yii\filters\auth\QueryParamAuth;
- use yii;
- class ImageUploadController extends ActiveController
- {
- public $modelClass = 'common\models';
- public $types = array('image/bmp' => 'bmp', 'image/jpeg' => 'jpg', 'image/png' => 'png', 'image/gif' => 'gif');
- public $imgtype = array('bmp','jpg','png','gif','jpeg');
- public $filepath;
- public $enableCsrfValidation = false;
- public function behaviors()
- {
- return ArrayHelper::merge(parent::behaviors(), [
- 'authenticator' => [
- 'class' => QueryParamAuth::className(),
- 'tokenParam' => "token",//access-token修改为token
- 'optional' => [//不需要认证方法名 array
- ],
- ]
- ]);
- }
- public function actionUpload()
- {
- $imgtype = Yii::$app->request->post('imgtype');
- if(empty($imgtype))
- {
- return Apireturn::sent(0,'图片类型不能为空',200);
- }
- $file= $_FILES;
- if(count($file)<=0)
- return Apireturn::sent(0,'未上传图片',200);
- $url =array();
- $folder = "/".$imgtype."/".date("Ym")."/".date("d")."/";
- $file_path=\Yii::getAlias('@common/allupload').$folder;
- for ($i=0;$i<count($file['imgbase']['name']);$i++)
- {
- $files['name']=$file['imgbase']['name'][$i];
- $files['type']=$file['imgbase']['type'][$i];
- $files['tmp_name']=$file['imgbase']['tmp_name'][$i];
- $files['error']=$file['imgbase']['error'][$i];
- $files['size']=$file['imgbase']['size'][$i];
-
- $result = $this->uploadFile($files,$file_path,2*1024*1024,$this->imgtype);
- if(!empty($result['dest'])) {
- $res = self::uploadresize($file_path.$result['dest'],$file_path."s_".$result['dest']);
- if($res){
- $url[] = $folder ."s_". $result['dest'];
- }else{
- $url[] = $folder . $result['dest'];
- }
- }
- else {
- return Apireturn::sent(0, $result['mes'], 200);
- }
- }
- return Apireturn::sent(1,'success',200,$url);
- }
- public function uploadFile($file,$path='./uploads',$max_size,$allowExt){
- $filename=$file['name'];
- $type=$file['type'];
- $temp_name=$file['tmp_name'];
- $error=$file['error'];
- $size=$file['size'];
- if ($error==UPLOAD_ERR_OK) {
- if ($size>$max_size) {
- $res['mes']=$filename."文件超过规定上传大小,最多2M";
- }
- $ext=$this->getExt($filename);
- if (!in_array($ext, $allowExt)) {
- $res['mes']=$filename.'文件名不合乎规范';
- }
- // if (!is_uploaded_file($temp_name)) {
- // $res['mes']=$filename."文件不是通过HTTP POST 方法上传上传过来的";
- // }
- if (@$res) {
- return $res;
- }
- if (!file_exists($path)) {
- mkdir($path,0777,true);
- chmod($path, 0777);
- }
- $fname=$this->getUniName();
- $url =$fname.'.'.$ext;
- $destination=$path.'/'.$fname.'.'.$ext;
- if (move_uploaded_file($temp_name, $destination)) {
- $res['mes']=$filename.'上传成功';
- $res['dest']=$url;
- }else{
- $res['mes']=$filename."文件上传失败";
- }
- }else{
- switch ($error) {
- case '1':
- $res['mes']="超过了配置文件上传文件的大小";
- break;
- case '2':
- $res['mes']="超过表单设置上传文件文件的大小";
- break;
- case '3':
- $res['mes']="文件部分被上传";
- break;
- case '4':
- $res['mes']="没有文件被上传";
- break;
- case '6':
- $res['mes']="没有找到临时目录";
- break;
- case '7':
- $res['mes']="文件不可写";
- break;
- default:
- $res['mes']="上传文件失败";
- break;
- }
- }
- return $res;
- }
- public function getExt($filename){
- $arr=explode('.', basename($filename));
- return end($arr);
- }
- public function getUniName(){
- return md5(uniqid(microtime(true),true));
- }
- /**
- * 生成缩略图
- * @param $localimg
- * @param $remoteimg
- * @param int $x
- * @param int $y
- * @return bool
- */
- static function uploadresize($localimg,$remoteimg,$x = 400,$y = 400){
- $resize = new ImageResize();
- $result = $resize->resize($localimg,$remoteimg,$x,$y);
- if(!$result){
- return false;
- }
- return true;
- }
- }
|