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

技术分享 2018年09月14日 阅读 963 豆浆大叔

前言

首先可能大家可能经常网站上传图片什么的都是上传在自己的服务器上,这样没什么问题;或许大家对阿里云的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();
//然后就是调用了。

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

其实很简单,就是简单的封装给大家参考使用

豆浆大叔 豆浆大叔 资深PHP工程师@某一线大厂

写了 264486 字,被 3 人关注,共写了 75 篇笔记

(已更名,豆浆大叔)有理想的码农,不应该只探究人性的懒惰面,而是积极的去探索人生道路上的荆棘坎坷,努力提升自己完善自己!
推荐文章:
  • 大数据领域Flink 与 Spark之间的区别?

    学而不思则罔 思而不学则殆,2020年砥砺前行!前言大家都知道已经2020年了,也到了新的一年。作为一个主营电商的公司,年底都会很忙。所以最近的更新进度也停滞不前,本来准备大侃PHP设计模式的,但是因...

    豆浆大叔 3个月前 3 吐槽 255 围观 技术分享
  • php如何实现钩子与实践案例

    前言学而不思则罔,思而不学则殆。30则而立,头顶正则脱光!昨天晚上,突然想起了PHP中的钩子如何使用?说实话,像dz,wordpress,TP,CI框架都已经集成了Hook钩子,尽管我不怎么使用框架以...

    豆浆大叔 3个月前 0 吐槽 101 围观 技术分享
  • Linux无法显示ip地址的解决办法

    今天想趁着有时间,用虚拟机调试一下lua脚本和其他的功能,结果启动虚拟机使用xshell连接不上,然后使用终端查看IP地址无法查看到,记录一下排查错误流程。查看IP地址使用ip addr 或者 ifc...

    豆浆大叔 4个月前 0 吐槽 155 围观 技术分享
  • 高并发性能指标QPS,TPS,RT,并发数,吞吐量是指什么?

    QPS,每秒查询QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系...

    豆浆大叔 4个月前 0 吐槽 365 围观 技术分享
  • 分享一些PHP常用的小算法

    下面分享一些最常见的算法,用PHP如何实现,拓展下知识面。冒泡排序function bubble_sort($arr) { $n=count($arr); for($i=0;$i<$n-1;$...

    我也庸俗 4个月前 0 吐槽 134 围观 技术分享
表情
  • [:821l1001:]
  • [:821l1002:]
  • [:821l1003:]
  • [:821l1004:]
  • [:821l1005:]
  • [:821l1006:]
  • [:821l1007:]
  • [:821l1008:]
  • [:821l1009:]
  • [:821l1010:]
  • [:821l1011:]
  • [:821l1012:]
  • [:821l1013:]
  • [:821l1014:]
  • [:821l1015:]
  • [:821l1016:]
  • [:821l1017:]
  • [:821l1018:]
  • [:821l1019:]
  • [:821l1020:]
  • [:821l1021:]
  • [:821l1022:]
  • [:821l1023:]
  • [:821l1024:]
  • [:821l1025:]
  • [:821l1026:]
  • [:821l1027:]
  • [:821l1028:]
  • [:821l1029:]
  • [:821l1030:]
  • [:821l1031:]
  • [:821l1032:]
  • [:821l1033:]
  • [:821l1034:]
  • [:821l1035:]
  • [:821l1036:]
  • [:821l1037:]
  • [:821l1038:]
  • [:821l1039:]
  • [:821l1040:]
  • [:821l1041:]
  • [:821l1042:]
  • [:821l1043:]
  • [:821l1044:]
  • [:821l1045:]
  • [:821l1046:]
  • [:821l1047:]
  • [:821l1048:]
  • [:821l1049:]
  • [:anger:]
  • [:applause:]
  • [:awkward:]
  • [:brokenheart:]
  • [:clown:]
  • [:confused:]
  • [:decline:]
  • [:diggingmouth:]
  • [:eyebrows:]
  • [:grinning:]
  • [:haha:]
  • [:ill:]
  • [:kiss:]
  • [:lascivious:]
  • [:laugh:]
  • [:love:]
  • [:lovely:]
  • [:rhinorrhea:]
  • [:smile:]
  • [:solid:]
  • [:strong:]
  • [:sweat:]
  • [:tearcollapse:]
  • [:tongue:]
  • [:uncomfortable:]
  • [:weak:]
  • [:worry:]
Tips:支持Markdown语法

0 个评论

抢座沙发~~~~
资深PHP工程师 @ 某一线大厂

登录

第三方账号登录:
GitHub
微信
微博