一、composer安装阿里云扩展
composer require aliyuncs/oss-sdk-php
二、封装使用阿里云的类
<?php
/**
*
* User: gzs
* Date: 2021/6/10
*/
namespace tools\oss;
use OSS\OssClient;
class OSS
{
public static function aliyun($savePath,$category='',$isunlink=false,$bucket=""){
$accessKeyId = config('aliyun_oss.accessKeyId');//去阿里云后台获取秘钥
$accessKeySecret = config('aliyun_oss.accessKeySecret');//去阿里云后台获取秘钥
$endpoint = config('aliyun_oss.endpoint');//你的阿里云OSS地址
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
// 判断bucketname是否存在,不存在就去创建
if( !$ossClient->doesBucketExist($bucket)){
$ossClient->createBucket($bucket);
}
$category=empty($category)?$bucket:$category;
$savePath = str_replace("\\","/",$savePath);
$object = $category.'/'.$savePath;//想要保存文件的名称
$file = './uploads\\'.$savePath;//文件路径,必须是本地的。
try{
$ossClient->uploadFile($bucket,$object,$file);
if ($isunlink==true){
unlink($file);
}
}catch (OssException $e){
$e->getErrorMessage();
}
$oss=config('aliyun_oss.url');
$web = "";//为自己bucket的外网访问地址
return $web.$oss."/".$object;
}
}
在tp框架中的extend中创建类文件,位置随意,注意命名空间要随类文件位置变动。
这里的返回值就是你上传图片完成后的OSS地址,可直接入库保存
上面的阿里云配置我是写到了config中,直接填写也可以
//阿里云配置
'aliyun_oss' => [
'accessKeyId' => '', //您的Access Key ID 必填
'accessKeySecret' => '', //您的Access Key Secret 必填
'endpoint' => 'oss-cn-shanghai.aliyuncs.com', //阿里云oss 外网地址endpoint 必填 从你的OSS首页就能看到
'bucket' => '', //Bucket名称 非必填
'url' => '' // 访问的地址 非必填
]
三、使用
public function addDo(Request $request)
{
$data = $request->post();
$data['image'] = $request->file('image');
//验证
$rules = [
'title' => 'require',
'name' => 'require',
'desc' => 'require',
'image' => 'require',
];
$msg = [
'title.require' => '文章标题不能为空',
'name.require' => '发布者不能为空',
'desc.require' => '文章简介不能为空',
'image.require' => '文章图片不能为空',
];
$res = $this->validate($data,$rules,$msg);
if($res !== true){
return $this->error($res);
}
//获取上传文件
$file = $data['image'];
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){ // 成功上传后 获取上传信息
// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
$image = $info->getSaveName();
}else{ // 上传失败获取错误信息
echo $file->getError();
}
//上传阿里云
$data['image'] = $this->aliyun($image,'','','gzs123');
//文章添加
$add_res = articleModel::create($data);
if($add_res){
return $this->success('添加成功','month/article/listShow');
}else{
return $this->error('网络错误');
}
}
上传文件部分直接参考tp5手册,讲解的很详细。主要是上传阿里云方法传递的参数。
第一个位置为上传到OSS的文件地址,最后一个为你的阿里云bucket名称。中间两个参数为空即可,一定不要省略掉。