ThinkPHP5 实现七牛云图片上传功能

  • 背景
    最近在学习大佬的教程时,遇到七牛云图片上传的操作;
    发现若是有后期在线网站的开发需求,可以考虑选取;
    主要是很多网站在使用,可作为学习的小技能;
    在此做下记录,方便同样需求的小伙伴以作参考,同时也是自己的备忘经验,欢迎指摘 …

七牛云官方网站
PHP SDK 开发文档

> 本人使用的框架为:ThinkPHP5.0.24
> 其实,可以直接阅读官方文档,自行对照开发即可,后面的也只是我们的实际操作而已

▼ 前期准备

①. 开通七牛开发者帐号
②. 如果已有账号,点击【秘钥管理】查看 Access Key 和 Secret Key
③. 到 “对象存储” 新建一个存储空间 (公开空间),并记下 名称

④. 运行 Composer 命令安装最新稳定版本的 SDK

			php composer.phar require qiniu/php-sdk
	或:	composer require qiniu/php-sdk

▼ 开发步骤

①. 在 application/extra 中新建配置文件 qiniui.php

 return [
    'ak' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',//Access_Key
    'sk' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',//Secret_Key
    'bucket' => 'mz-7img',//空间名称
    'image_url' => 'xxxxxx.xxx.clouddn.com/',//外链域名
];

②. 在目录 /application/common/lib下,创建 Upload.php 类,源代码如下:

 <?php
/**
 * Created by PhpStorm.
 * User: moTzxx
 * Date: 2020/4/11
 * Time: 12:20
 */

namespace app\common\lib;
// 引入七牛鉴权类
use Qiniu\Auth;
use Qiniu\Config;
use Qiniu\Storage\BucketManager;
use Qiniu\Storage\UploadManager;

/**
 * 七牛云图片上传基础类库
 * Class Upload
 * @package app\common\lib
 */
class Upload
{
    /**
     * 七牛云图片上传操作
     * @return bool|string
     */
    public static function imageQiNiu(){
        // 要上传文件的临时文件
        $file = $_FILES['file']['tmp_name'];
        if (empty($file)){
            $message = "您提交的图片数据不合法";
            return false;
        }else{
            //拿到上传文件的格式
            $pathinfo = pathinfo($_FILES['file']['name']);
            //获取图片后缀名
            $ext = $pathinfo['extension'];
            $config = config('qiniu');
            //构建一个鉴权对象
            $auth = new Auth($config['ak'],$config['sk']);
            //生成上传的token
            $token = $auth->uploadToken($config['bucket']);

            //上传到七牛云后 保存的文件名
            $saveFileName = date("YmdHis").substr(md5($file),0,6).rand(0000,9999).".".$ext;

            //初始化UploadManager类
            $uploadMgr = new UploadManager();
            $opRes = $uploadMgr->putFile($token,$saveFileName,$file);
            if ($opRes[1] != null){
                return false;
            }else{
                return $saveFileName;
            }
        }
    }

    /**
     * 七牛云图片删除操作
     * @param $delFileName 七牛云图片名称,例:2020041208595410935c8386.jpg
     * @return bool
     */
    public static function delImgQiNiu($delFileName)
    {
        // 判断是否是图片
        $isImage = preg_match('/.*(\.png|\.jpg|\.jpeg|\.gif)$/', $delFileName);
        if(!$isImage){
            return false;
        }else{
            //七牛云账号配置信息
            $conf = config('qiniu');
            // 构建鉴权对象
            $auth = new Auth($conf['ak'],$conf['sk']);
            // 配置
            $config = new Config();
            // 管理资源
            $bucketManager = new BucketManager($auth, $config);

            // 删除文件操作
            $opRes = $bucketManager->delete($conf['bucket'], $delFileName);
            if (is_null($opRes)) {
                // 删除操作成功
                return true;
            }else{
                return false;
            }
        }
    }
}

③. 图片上传控件,点击操作进行 ajax 请求,则后台服务端处理逻辑参考如下:

     public function uploadQiNiu(Request $request){
        $status = 0;
        $data = [];
        if ($request->Method()== 'POST') {
            $image = Upload::imageQiNiu();
            if ($image){
                $status = 1;
                $data['url'] = config('qiniu.image_url').$image;
                $message = '上传成功';
            }else{
                $message = '上传失败';
            }
        }else{
            $message = "参数错误";
        }
        return showMsg($status, $message,$data);

    }
  • 后面就是针对自己的业务逻辑,自行优化代码了 …
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章