美文网首页
Laravel 整合ALIYUN OSS笔记

Laravel 整合ALIYUN OSS笔记

作者: 老陈的记事本 | 来源:发表于2019-06-25 13:15 被阅读0次

    一、/composer.json文件添加配置

    在require中添加"johnlui/aliyun-oss": "^2.2",

    image.png

    二、/config/app.php添加配置

    添加代码:

    /*
        |--------------------------------------------------------------------------
        | Aliyun OSS
        |--------------------------------------------------------------------------
        | @Author: zhanhaisheng
        */
        'City'              => env('ALIOSS_CITY', null),                    // 地区
        'NetworkType'       => env('ALIOSS_NETWORKTYPE', null),             // 网络类型
        'IsInternal'        => env('ALIOSS_ISINTERNAL', null),              // 是否外网true内网false
        'AccessKeyId'       => env('ALIOSS_KEYID', null),                   // KeyId
        'AccessKeySecret'   => env('ALIOSS_KEYSECRET', null),               // KeySecret
        'BucketName'        => env('ALIOSS_BUCKETNAME', null)  ,            // bucket
        'Path'              => env('ALIOSS_PATH',null),                     //读取文件的路径
    
    image.png

    三、/.env文件中增加ALIOSS的配置

    ALIOSS_CITY=杭州
    ALIOSS_NETWORKTYPE=经典网络
    ALIOSS_ISINTERNAL=false
    ALIOSS_KEYID=xxxxxxxxxxxxxxxxxx
    ALIOSS_KEYSECRET=xxxxxxxxxxxxxxxxxxxxxxxx
    ALIOSS_BUCKETNAME=xxxxxx
    ALIOSS_PATH=https://xxxxx.oss-cn-hangzhou.aliyuncs.com/
    
    image.png

    四、更新composer

    composer update
    

    操作视图:

    Microsoft Windows [版本 10.0.17763.557]
    (c) 2018 Microsoft Corporation。保留所有权利。
    
    D:\>composer update
    

    五、创建OSS类

    放在/app/Services/OSS.php中,默认没有这个文件夹,自行创建。当然也可以放在其他文件夹中。

    <?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);
        }
    }
    ?>
    

    六、具体使用OSS

    use App\Services\OSS;    //在使用的文件use这个类
    

    示例,个人使用的一个基类的上传方法

    
         /**
         * OSS图片上传
         */
        public function uploadImg(Request $request){
            $file = $request->file('file');
            // 判断图片有效性
            if (!$file->isValid()) {
               return $this->error('上传图片无效');
            }
            // 获取后缀
            $ext = $file->getClientOriginalExtension();
            // 随机生成图片名字
            $name = uniqid(date('Ymd_')).str_random(3);
            $filePath = $file->getRealPath();
            $ossKey = 'sys/'.date('Y-m-d').'/'.$name.'.'.$ext;
            //上传图片至OSS上
            $result = OSS::upload($ossKey, $filePath);
            return $result;
        }
    
    

    相关文章

      网友评论

          本文标题:Laravel 整合ALIYUN OSS笔记

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