首先安装官方推荐的上传云端插件 Thans / thinkphp-filesystem-cloud
1采用composer安装
composer require thans/thinkphp-filesystem-cloud
2: 在config/filesystem.php中添加阿里云到配置
<?php
return [
// 默认磁盘
'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然后编写业务逻辑代码
<?php
namespace 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';
}
}
}
这是用云开发开发的小程序,可以参考一下