美文网首页
Laravel(5.7) 运用 OSS

Laravel(5.7) 运用 OSS

作者: zmindthegap | 来源:发表于2019-04-22 16:40 被阅读0次

    要求

         ` PHP >= 7.0`
    

    安装

               ` composer require "johnlui/aliyun-oss `
    

    配置

        `组件下载完成之后,需要在 app/config/oss.php 中写入六项配置(个人推荐)`
    
    image

    可在.env文件中添加适量配置(根据实际数据填写)

    image

    写入配置后注意使用 php artisan config:clear 清除配置缓存


    构建 Services 文件

    后台需要一个 Service 文件, 在 app/Service 下新建一个 OSS.php 文件

    image

    附上代码:

    <?php
    
    namespace App\Services;
    
    /**
    
    * @Author: zhanhaisheng
    
    * @String: OSS文件存储
    
    */
    
    use JohnLui\AliyunOSS;
    
    use Exception;
    
    use DateTime;
    
    class OSS {
    
      /* 城市名称:
    
      * 
    
      *  经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
    
      *  VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
    
      */   
    
      private $ossClient;
    
      /**
    
      * 私有初始化 API,非 API,不用关注
    
      * @param boolean 是否使用内网
    
      */
    
      public function __construct($isInternal = false)
    
      {
    
        if (config('app.NetworkType') == 'VPC' && !$isInternal) {
    
          throw new Exception("VPC 网络下不提供外网上传、下载等功能");
    
        }
    
        $this->ossClient = AliyunOSS::boot(
    
          config('app.City'),
    
          config('app.NetworkType'),
    
          $isInternal,
    
          config('app.AccessKeyId'),
    
          config('app.AccessKeySecret')
    
        );
    
      }
    
      /**
    
      * 使用外网上传文件
    
      * @param  string 上传之后的 OSS object 名称
    
      * @param  string 上传文件路径
    
      * @return boolean 上传是否成功
    
      */
    
      public static function upload($ossKey, $filePath, $options = [])
    
      {
    
        $oss = new OSS(config('app.IsInternal'));
    
        $oss->ossClient->setBucket(config('app.BucketName'));
    
        return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
    
      }
    
      /**
    
      * 使用外网直接上传变量内容
    
      * @param  string bucket名称
    
      * @param  string 上传之后的 OSS object 名称
    
      * @param  string 上传的变量
    
      * @return boolean 上传是否成功
    
      */
    
      public static function uploadContent($ossKey, $content, $options = [])
    
      {
    
        $oss = new OSS(config('app.IsInternal'));
    
        $oss->ossClient->setBucket(config('app.BucketName'));
    
        return $oss->ossClient->uploadContent($ossKey, $content, $options);
    
      }
    
      /**
    
      * 使用外网删除文件
    
      * @param  string bucket名称
    
      * @param  string 目标 OSS object 名称
    
      * @return boolean 删除是否成功
    
      */
    
      public static function deleteObject($ossKey)
    
      {
    
        $oss = new OSS(config('app.IsInternal'));
    
        $oss->ossClient->setBucket(config('app.BucketName'));
    
        return $oss->ossClient->deleteObject(config('app.BucketName'), $ossKey);
    
      }
    
        /**
    
        * 复制存储在阿里云OSS中的Object
    
        *
    
        * @param string $sourceBuckt 复制的源Bucket
    
        * @param string $sourceKey - 复制的的源Object的Key
    
        * @param string $destBucket - 复制的目的Bucket
    
        * @param string $destKey - 复制的目的Object的Key
    
        * @return Models\CopyObjectResult
    
        */
    
        public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
    
        {
    
            $oss = new OSS(config('app.IsInternal')); // 上传文件使用内网,免流量费
    
            return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
    
        }
    
        /**
    
        * 移动存储在阿里云OSS中的Object
    
        *
    
        * @param string $sourceBuckt 复制的源Bucket
    
        * @param string $sourceKey - 复制的的源Object的Key
    
        * @param string $destBucket - 复制的目的Bucket
    
        * @param string $destKey - 复制的目的Object的Key
    
        * @return Models\CopyObjectResult
    
        */
    
        public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
    
        {
    
            $oss = new OSS(config('app.IsInternal')); // 上传文件使用内网,免流量费
    
            return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
    
        }
    
        public static function getUrl($ossKey)
    
        {
    
            $oss = new OSS();
    
            $oss->ossClient->setBucket(config('app.BucketName'));
    
            return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));
    
        }
    
        public static function createBucket($bucketName)
    
        {
    
            $oss = new OSS();
    
            return $oss->ossClient->createBucket($bucketName);
    
        }
    
        public static function getAllObjectKey($bucketName)
    
        {
    
            $oss = new OSS();
    
            return $oss->ossClient->getAllObjectKey($bucketName);
    
        }
    
        /**
    
        * 获取指定Object的元信息
    
        *
    
        * @param  string $bucketName 源Bucket名称
    
        * @param  string $key 存储的key(文件路径和文件名)
    
        * @return object 元信息
    
        */
    
        public static function getObjectMeta($bucketName, $osskey)
    
        {
    
            $oss = new OSS();
    
            return $oss->ossClient->getObjectMeta($bucketName, $osskey);
    
        }
    
    }
    
    ?>
    
    

    以上操作完毕就可以完美使用Aliyun OSS文件系统了

    注意:先引入后使用,咳咳

    原作者=====地址奉上johnlui AliyunOSS

    相关文章

      网友评论

          本文标题:Laravel(5.7) 运用 OSS

          本文链接:https://www.haomeiwen.com/subject/oacugqtx.html