form 表单必须添加 enctype="multipart/form-data"
创建一个上传图片handle类 :
getClientOriginalExtension() )?: 'png'; // $file -> getClientOriginalExtension(); //上传文件的后缀 $filename = $file_prefix . '_' . time() . '_' . str_random(10) . '.' .$extension; // 如果上传的不是图片的话 if( !in_array( $extension , $this->allowed_ext )){ return false; } $file->move( $upload_path , $filename); return [ 'path' => "/$folder_name/$filename" ]; } }
使用
if( $request->avater){ $result = $uploader->save($request->avater , 'avater' , $user->id); if( $result ){ $data['avater'] = $result['path']; } }
验证
'avater' => 'mimes:jpeg,bmp,png|dimensions:min_width=100,min_height=200'
图片裁剪
安装扩展包 intervention
composer require intervention/image
获取配置信息
php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
修改上传文件
getClientOriginalExtension()) ?: 'png'; // 拼接文件名,加前缀是为了增加辨析度,前缀可以是相关数据模型的 ID // 值如:1_1493521050_7BVc9v9ujP.png $filename = $file_prefix . '_' . time() . '_' . str_random(10) . '.' . $extension; // 如果上传的不是图片将终止操作 if ( ! in_array($extension, $this->allowed_ext)) { return false; } // 将图片移动到我们的目标存储路径中 $file->move($upload_path, $filename); // 如果限制了图片宽度,就进行裁剪 if ($max_width && $extension != 'gif') { // 此类中封装的函数,用于裁剪图片 $this->reduceSize($upload_path . '/' . $filename, $max_width); } return [ 'path' => config('app.url') . "/$folder_name/$filename" ]; } public function reduceSize($file_path, $max_width) { // 先实例化,传参是文件的磁盘物理路径 $image = Image::make($file_path); // 进行大小调整的操作 $image->resize($max_width, null, function ($constraint) { // 设定宽度是 $max_width,高度等比例双方缩放 $constraint->aspectRatio(); // 防止裁图时图片尺寸变大 $constraint->upsize(); }); // 对图片修改后进行保存 $image->save(); } }
本文由 邓尘锋 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: May 4, 2019 at 11:40 am