Thinkphp调用阿里云OSS上传文件
也是随手写的,帮一个实习生做的,顺便写出来
使用的是thinkphp5.1(6.0+也一样) + composer require aliyuncs/oss-sdk-php 教程比较简单,全部写在一个控制器文件里
实现步骤
- composer require aliyuncs/oss-sdk-php 安装阿里云oss sdk
- 在app/index/controller/index.php中添加以下代码
// 实例index控制器
public function index()
{
if(request()->isPost()){//post处理文件上传
$file = request()->file('fileUpload');
$info = $file->move('./uploads'); //这里要注意下检查public目录权限
if ($info) {
$path = $info->getSaveName();
$filepath = '你的oss绑定域名' . $path;
$fileName = 'uploads/' . $path;
$config=config('aliyun_oss');
$this->uploadFile($config['Bucket'], $fileName, $path);
return $path;
} else {
// 上传失败获取错误信息
echo $file->getError();
}
return json($file);
}else{//get默认显示html
return view('upload',['name'=>'测试上传']);
}
}
/**
* 实例化阿里云OSS
* @return object 实例化得到的对象
* @return 此步作为共用对象,可提供给多个模块统一调用
*/
public function new_oss(){
//获取配置项,并赋值给对象$config
$config=config('aliyun_oss');
//实例化OSS/*
$oss=new \OSS\OssClient($config['KeyId'],$config['KeySecret'],$config['Endpoint']);
return $oss;
}
/**
* 上传指定的本地文件内容
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @param string $object 上传的文件名称
* @param string $Path 本地文件路径
* @return json
*/
public function uploadFile($bucket,$object,$Path){
//try 要执行的代码,如果代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示
try{
//没忘吧,new_oss()是我们上一步所写的自定义函数
$ossClient =$this->new_oss();
//uploadFile的上传方法
$res= $ossClient->uploadFile($bucket, $object, $Path);
return json($res);
} catch(OssException $e) {
//如果出错这里返回报错信息
return $e->getMessage();
}
}
3.设置配置文件 config/app.php(部分tp5为app/config.php)中添加以下配置
'aliyun_oss' => [
'KeyId' => '************', //您的Access Key ID
'KeySecret' => '*************', //您的Access Key Secret
'Endpoint' => 'http://oss-cn-hangzhou.aliyuncs.com', //阿里云oss 地域地址endpoint,不带Bucket
'Bucket' => '*****', //Bucket名称
]
4.配置完成后 测试POST即可,默认相应为本地和oss文件存储路径,自己搭配域名即可,写的简单,拓展性高,欢迎大家补充
部分问题解决
1.file->move() null
检查request->file(‘file’);文件上传的key值是否相同
2. InvalidBucketName: The specified bucket is not valid.
检查Bucket名称和地域地址endpoint是否一致
其他没啥的了,具体参考阿里云官方文档
看完了?还不点个赞?