Thinkphp5.0本地远程上传图片至七牛服务器案例!

你的思恋难以割舍2019-02-10 14:31:48

前言

        首先可能大家可能经常网站上传图片什么的都是上传在自己的服务器上,这样没什么问题;或许大家对阿里云的OSS上传更熟悉,这里呢就不细说了,基本上大部分的云服务器这种我都使用过,又拍云,腾讯云,阿里云,百度云,新浪,七牛云等等,这些都是大家常见的,今天呢,就来搞一下七牛云的上传,后面呢,陆续会把其他云产品的这种模式都发一下,或许对大家有些许帮助,废话不说直接开始了。

第一步

        我们需要下载七牛云提供的SDK,官方地址:七牛PHP SDK,里面有详细的介绍,常用的安装方式composer安装,当然你也可以源码下载到项目里引用。

        这里是官方提供的引用方式,如果说是使用框架,应该基本上都是自动加载了,所以这里咱们使用thinkphp框架来演示下,使用的composer安装,目录会自动安装在verdor里面,composer.json里面会自动带上 "qiniu/php-sdk": "^7.2",所以大家可以省去很多事情,专心实现功能即可。

第二步

封装上传的方法,在extent目录下面新建Qiniu文件夹,然后在里面新建一个Qiniu.php类,内容如下:

<?php/**
 * @author : attacker
 * @date : 2018.09.15
 *
 */namespace Qiniu;use Qiniu\Auth;use Qiniu\Storage\BucketManager;use Qiniu\Storage\UploadManager;/**
 * 功能说明:七牛云存储上传
 */class Qiniu{    /***********七牛云存储参数**********/
    /**
     *@desc 用于签名的公钥
     */
    protected $Accesskey = null;    
    /**
     *@desc 用于签名的私钥
     */
    protected $Secretkey = null;     

    /**
     *@desc 存储空间
     */
    protected $Bucket = ''; 
    
    /**
     *@desc 七牛用户自定义访问域名
     */
    protected $QiniuUrl = '';    

    /*********获取七牛云存储参数*************/

    /**
     * @desc 构造函数
     */
    public function __construct($config = array())
    {       if(empty($config)) 
        {
          $congfig = Config::get('qiniu');//配置文件
        }        $this->Accesskey = $congfig["Accesskey"];          //用于签名的公钥

        $this->Secretkey = $congfig["Secretkey"];     //用于签名的私钥

        $this->Bucket = $congfig["Bucket"];          //存储空间

        $this->QiniuUrl = $congfig["QiniuUrl"];     //七牛用户自定义访问域名
    }    /**
     * @desc 文件上传
     * @author attacker
     * @time 2018.09.15
     * @param $filePath 文件自定义路径
     * @param $fileName  文件名称
     * @return json 
     */
    public function setUpload($filePath,$fileName)
    {        if (empty($filePath) || empty($fileName)) {            return false;
        }        //构建鉴权对象
        $auth = new Auth($this->Accesskey, $this->Secretkey);

        $auth_token = $auth->uploadToken($this->Bucket);        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new UploadManager();        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->putFile($auth_token, $filePath,$fileName);        if ($err !== null) {            return $err;
        } else {            return $ret;
        }
    }    /**
     * @desc 字节符上传文件(获取远程图片上传)
     * @author attacker
     * @time 2018.09.15
     * @param $path 文件自定义路径
     * @param $content  远程图片内容
     * @return json 
     */
    public function uploadBytecode($path, $content)
    {        //构建鉴权对象
        $auth = new Auth($this->Accesskey, $this->Secretkey);

        $auth_token = $auth->uploadToken($this->Bucket);        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new UploadManager();        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->put($auth_token, $path, $content);        if ($err !== null) {            return $err;
        } else {            return $ret;
        }
    }    /**
     * @desc 图片删除
     * @access public
     * @author attacker
     * @time 2018.09.15
     * @param $fileName 图片路径名称
     * @return bool
     */
    public function deleteImage($fileName)
    {        //构建鉴权对象
        $auth = new Auth($this->Accesskey, $this->Secretkey);        
        //加载配置文件  大家看sdk就明白了
        $config = new \Qiniu\Config(); 

        //实例化资源管理类
        $bucketManager = new BucketManager($auth, $config);

        $result = $bucketManager->delete($this->Bucket, $fileName);        if($result == null){            return true;
        }else{            return $result->message();
        }   
    }
}

第三步

至于调用,我想大家应该都明白了。

$image = new Qiniu();//然后就是调用了。

基本上到这里就差不多可以了,至于分片上传等等,这里暂时没有考虑到,有想了解的可以看官方搞一下。

其实很简单,就是简单的封装给大家参考使用!欢迎大家来访https://www.phpassn.com/

Copyright © 古田计算器虚拟社区@2017