首先安装官方推荐的上传云端插件 Thans / thinkphp-filesystem-cloud
1采用composer安装
composer require thans/thinkphp-filesystem-cloud
2: 在config/filesystem.php中添加阿里云到配置
<?phpreturn [// 默认磁盘'default' => env('filesystem.driver', 'aliyun'),// 磁盘列表'disks' => ['local'=> ['type' => 'local','root' => app()->getRuntimePath() . 'storage',],'public' => [// 磁盘类型'type' => 'local',// 磁盘路径'root' => app()->getRootPath() . 'public/storage',// 磁盘路径对应的外部URL路径'url'=> '/storage',// 可见性'visibility' => 'public',],// 更多的磁盘配置信息'aliyun' => ['type' => 'aliyun','accessId' => env('oss.accessid'),'accessSecret' => env('oss.accesssecret'),'bucket' => env('oss.bucket'),'endpoint' => env('oss.endpoint'),'url'=> 'https://'.env('oss.endpoint'),//不要斜杠结尾,此处为URL地址域名。],],];
3在您的环境中安装好Imagick扩展库,这个自行找教程安装,推荐用这个压缩,gd压缩占内存
4然后编写业务逻辑代码
<?phpnamespace app\controller;use think\facade\App;use think\facade\Filesystem;use think\File;use app\BaseController;class Upload extends BaseController{public function uploadImg(){$file = request()->file('file');try {//限制内存 2m$file_size = 1024 * 1024 * 2;//验证图片格式validate(['file' => ['fileSize' => $file_size,'fileExt' => 'jpg,png,gif,jpeg,bmp','fileMime' => 'image/jpeg,image/png,image/gif',]])->check(['file' => $file]);//先将图片保存到本地$local_savename = Filesystem::disk('local')->putFile(config('app.app_name'), $file);$local_savename_path = App::getRootPath() . "runtime/storage/" . $local_savename;//获取图片后缀$res_extension = $file->extension();//以下类型的图片才可以压缩,gif不行if ($res_extension == 'jpg' || $res_extension == 'jpeg' || $res_extension == 'png') {//压缩图片$small_image = new \Imagick($local_savename_path);//压缩程度75%,测试过75比较好,质量差距不大$small_image->setImageCompressionQuality(75);$res = $small_image->writeImage($local_savename_path);$small_image->clear();$small_image->destroy();} //将本地压缩后的图片转为对象$f = new File($local_savename_path);//上传到oss我默认是oss,不选disk就是上传到oss$savename = Filesystem::putFile(‘topic’, $f);//上传的路径有时会变成\\,转一下$savename = str_replace("\\", "/", $savename);//删除本地的压缩后的图片@unlink($local_savename_path);//拿到上传到oss到图片路径echo$savename;} catch (\think\exception\ValidateException $e) { echo 'fail'; }}}
这是用云开发开发的小程序,可以参考一下