图片文件存服务器非常占用存储带宽资源,且用户访问体验也不佳,因此使用一些第三方oss存储就很有必要了。之前lz发布了一篇tp使用阿里云oss的博文。不过阿里oss是收费的。而七牛云提供了一些免费使用额度。所以,这里额外补充一篇。
1.前提准备
先去七牛云官网注册自己的账号,并申请好对象存储资源。创建一个空间。并绑定一个自定义源站域名。这里lz的空间名:liuqingwushui 源文件绑定域名为:liuqiniu.flchy.com
最后记得去个人中心密钥管理把 AK,SK秘钥复制下来,后面会用得上。
2.tp框架引入SDK
这里lz使用的tp框架是thinkphp5.0.24。结构目录大体如下。先去七牛云官网下载php sdk(PHP SDK_SDK 下载_对象存储 - 七牛开发者中心)。并将下载的sdk重命令为qiniu,把文件复制到vendor目录下。最终目录结构如下:
tips:这里注意一下下载的php sdk版本和php版本要对应,如果是很久之前的sdk版本。你在php7.4以上环境下运行,上传文件会报错:Trying to access array offset 。所以建议下载最新的sdk版本。
引入sdk之后,直接在代码中调用即可。这里调用的核心Controller文件代码:
Imgupload.php
<?php
namespace app\qiniu\controller;
use think\Controller;
use think\Db; //数据库连接类Db
require_once '../vendor/qiniu/autoload.php';
use \Qiniu\Auth;
use \Qiniu\Storage\UploadManager;
class Imgupload extends Controller{
public function index(){
$loginstatus = true; //可以调用方法来判断是否登录
if($loginstatus){
// 用于签名的公钥和私钥
$accessKey = '你的ak';
$secretKey = '你的sk';
// 初始化签权对象
$auth = new Auth($accessKey, $secretKey);
// 空间名 https://developer.qiniu.io/kodo/manual/concepts
$bucket = 'liuqingwushui';
// 生成上传Token
$token = $auth->uploadToken($bucket);
// 构建 UploadManager 对象
$uploadMgr = new UploadManager();
// 上传文件到七牛
$filePath = request()->file('file');
$file=$filePath->getInfo()['tmp_name'];
$key =$filePath->getInfo()['name']; //文件名
list($ret, $err) = $uploadMgr->putFile($token, $key, $file);
if ($err !== null) {
$array=array('code'=>'1','msg'=>"上传失败",'data'=>[]);
} else {
$array=array('code'=>'0','msg'=>"上传成功",'data'=>$ret);
}
echo json_encode($array);
}
}
}
调用该接口,传入文件表单参数file,上传成功后会返回如下结果:
该图片在七牛云的访问地址即:hots+key。这里的host就是前面提到的源文件绑定域名。