我先说下我的思路,先把正常图片存到服务器,再通过代码将服务器上的大图压缩,生成新的小图替代大图
下面上代码
前台HTML代码
<div class="upload-btn"> <input class="pic-ipt" type="file" accept="image/*" /> </div>
script代码
function upload_img(cid){ var formData = new FormData(); formData.append("file", $(this).get(0).files[0]); $.ajax({ url:'./upload_photo', type:'POST', data:formData, cache: false, contentType: false, processData: false, success:function(data){ console.log(data); } }); }
php代码
/** * 上传 */ public function upload_photo(){ $file = $this->request->file('file'); //生成缩略图 // $file = \think\Image::open($file); // $test = $file->thumb(400, 400)->save(ROOT_PATH . 'public' . DS . 'uploads/'.time().'.png'); // return ['code'=>2,'error'=>$test->getFilename()]; if(!empty($file)){ // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->validate(['size'=>4145728,'ext'=>'jpg,png,gif,jpeg'])->rule('uniqid')->move(ROOT_PATH . 'public' . DS . 'uploads'); $error = $file->getError(); // return ['code'=>2,'error'=>$error]; //验证文件后缀后大小 if($error){ return ['code'=>2,'error'=>$error]; // dump($error);exit; } if($info){ // 成功上传后 获取上传信息 // 输出 jpg $info->getExtension(); // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg $info->getSaveName(); // 输出 42a79759f284b767dfcb2a0197904287.jpg $photo = $info->getFilename(); $imgurl = './public/uploads/'.$photo;//原大图路径,当时我获取的时候费了不少时间 $image = \think\Image::open($imgurl); $image->thumb(400, 400,1)->save($imgurl);//生成缩略图、删除原图 }else{ // 上传失败获取错误信息 $file->getError(); } }else{ $photo = ''; } if($photo !== ''){ return ['code'=>1,'msg'=>'成功','photo'=>$photo]; }else{ return ['code'=>404,'msg'=>'失败']; } }