介绍
本篇博文介绍的是用TP5框架实现上传图片到七牛云,可用于cdn加速 减轻服务器压力
提前准备
注册七牛云账号,可以有免费的10G储存空间。
到 个人中心-密钥管理 查看 AccessKey 和 SecretKey。
注意:
七牛云需要实名认证的,使用对象存储服务绑定的域名需要是备案的(如果没有备案的域名 七牛云提供一个月的测试域名)
安装七牛云官方SDK
composer require qiniu/php-sdk -vvv
可以看到成功安装
配置七牛云
在TP框架的config文件下添加如下配置
'qiniu' => [
'accessKey' => '***********************************',
'secretKey' => '******************************',
'domain' => '****************',//域名地址
'bucket' => '*****',//空间名称
'zone'=> '****'//区域
],
编写控制器代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Config;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager; //实例化上传类
class Index extends Controller
{
//七牛云图片上传
public function qiniuy() {
if ($this->request->isPost()) {
if (empty($_FILES['image'])) {
response_json(-2, '请选择图片');
}
$key = $_FILES['image']['name'];//上传的图片名字
$filePath = $_FILES['image']['tmp_name'];//本地图片路径
$accessKey =config("qiniu")["accessKey"];
$secretKey =config("qiniu")["secretKey"];
$auth=new Auth($accessKey,$secretKey);
$bucket =config("qiniu")["bucket"];
$domain=config("qiniu")["domain"];
$token = $auth->uploadToken($bucket);
// 初始化 UploadManager 对象并进行文件的上传
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传
list($ret, $err) = $uploadMgr->putFile($token, $key,$filePath);
if ($err !== null) {
return ["err"=>1,"msg"=>$err,"data"=>""];
} else {
$imgPath=$domain.'/'.$key;
$path_data["thumb_url"] = $imgPath;
// $insert = Db::name('top_bar')->insert($path_data);
//这里可以将七牛云返回的图片地址写入数据库
response_json(200, '上传七牛云成功',$path_data);
}
} else {
response_json(-2, '请用POST提交');
}
}
}
由于博主是写成接口的形式的,所以代码会有多种返回提示的,这里也提供下接口返回方法
function response_json($code,$message,$data=array()){
$errno = $code==200?0:$code;
$res = array(
'errno'=>$errno,
'code'=>$code,
'message'=>$message,
'data'=>$data
);
echo json_encode($res);
exit;
}
效果
总结
博主这里用的阿里云的服务器然后,在绑定域名的时候,建议小伙伴用二级域名绑定,例如image或者cdn等语义好一点的二级域名用作绑定域名,如果遇到问题不懂可以看官方的帮助文档,最后,代码方面优化个人觉得还是不够的,这里主要为了演示上传功能,如果有什么问题或者代码方面的问题,欢迎在评论区留言,互相交流学习下