ThinkPHP5.0上传图片到阿里云OSS
1.首先登录阿里云OSS管理控制台新建一个Bucket存储桶:
(注意下面的EndPoint,即外网访问节点,后面的配置项有用到)
为了区分不同类型的图片,可以在存储桶下面新建目录进行存放:
2.在tp5的config中做如下一些配置:
//阿里云OSS配置
'alioss' =>[
'KeyId' => 'LTAIRb27m9hb3cIm', //AccessKey ID
'KeySecret' => 'nV2XfBuTEFUUYfT2gHnFMUAgwwCinQ ', //Access Key Secret
'EndPoint' => 'oss-cn-beijing.aliyuncs.com', //外网访问节点
'Bucket' => 'test-lws', //Bucket名称
],
其中AccessKey ID和Access Key Secret在这个地方可以找到:(注意保密)
3.到阿里云对象存储OSS官网文档,下载PHP的demo,下载后解压重命名文件夹为aliyun-oss,我放到了tp5的extend目录下面:
4. 然后在application/common下面新建一个阿里云OSS上传的工具类:
AliOss.php:(注意引入tp5的Image图像处理类库)
<?php
namespace app\common;
use think\Controller;
use think\Image;
require_once APP_PATH . '/../extend/aliyun-oss/autoload.php';
use OSS\Core\OssException;
use OSS\OssClient;
class AliOss
{
public static function uploadFile($mulu,$file) {
$resResult = Image::open($file);
try {
$KeyId = config('alioss.KeyId');
$KeySecret = config('alioss.KeySecret');
$EndPoint = config('alioss.EndPoint');
$Bucket = config('alioss.Bucket');
//实例化
$ossClient = new OssClient($KeyId, $KeySecret, $EndPoint);
//sha1加密 生成文件名 连接后缀
$fileName = $mulu.'/'.sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult->type();
//执行阿里云上传
$result = $ossClient->uploadFile($Bucket, $fileName, $file->getInfo()['tmp_name']);
//图片地址:$result['info']['url']
$arr = ['code'=>200,'msg'=>'上传成功','data'=>$fileName];
} catch (OssException $e) {
$arr = ['code'=>0,'msg'=>$e->getMessage(),'data'=>''];
}
return $arr;
}
}
5.上传图片时调用OSS工具类:
<?php
namespace app\index\controller;
use think\Controller;
use app\common\AliOss;
class Test extends Controller
{
public function uploadtest(){
$file = request()->file('headimg');
if($file){
$res = AliOss::uploadFile('headimg',$file);
if($res['code']==200){
//图片路径
$headimg = $res['data'];
//业务逻辑省略......
}
}
return json($res);
}
}