• 技术文章 >后端开发 >php教程

    Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片

    不言不言2018-05-08 16:36:38原创1518
    本篇文章主要介绍了Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例,具有一定的参考价值,有兴趣的可以了解一下

    之前从没接触过Yii,借助的各方资源来做的这个整合阿里云OSS的SDK上传图片实例,如果有不正之处请指出!
    前面参照了weinirumo 的介绍,大家可以自行去查看。

    好了,下面开始进入主题:

    准备工作:需要使用composer执行命令,如果没有安装composer的需要提前安装,参考文档:composer安装流程

    1、项目目录结构

    我使用的是基础版,只有后台目录,请自行对照自己的项目目录结构,会用到以下的几个目录:

    2、在项目根目录下运行cmd命令


    3、执行composer命令

    切换到中国国内镜像

    复制代码 代码如下:

    composer  config -g repo.packagist composer https://packagist.phpcomposer.com

    执行加载SDK命令

    composer require aliyuncs/oss-sdk-php

    4、查看根目录/vendor/里面,会增加以下目录文件,说明安装依赖文件成功:

    5、在根目录/common/里面新建components目录,新建Aliyunoss.php文件

    需要注意项目的命名空间,引入文件

    6、根目录/common/components/Aliyunoss.php代码:

    <?php
    /**
     * @Author: Marte
     * @Date:  2017-09-04 11:31:20
     * @Last Modified by:  Marte
     * @Last Modified time: 2017-09-06 16:19:28
     */
    namespace common\components;
    
    use Yii;
    use yii\base\Component;
    use OSS\OssClient;
    use OSS\Croe\OssException;
    
    class Aliyunoss extends Component
    {
      public static $oss;
    
      public function __construct()
      {
        parent::__construct();
        $accessKeyId = Yii::$app->params['oss']['accessKeyId'];         //获取阿里云oss的accessKeyId
        $accessKeySecret = Yii::$app->params['oss']['accessKeySecret'];     //获取阿里云oss的accessKeySecret
        $endpoint = Yii::$app->params['oss']['endPoint'];            //获取阿里云oss的endPoint
        self::$oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //实例化OssClient对象
      }
    
      /**
       * 使用阿里云oss上传文件
       * @param $object  保存到阿里云oss的文件名
       * @param $filepath 文件在本地的绝对路径
       * @return bool   上传是否成功
       */
      public function upload($object, $filepath)
      {
        // $res = false;
        $bucket = Yii::$app->params['oss']['bucket']; //获取阿里云oss的bucket
    
        $result=array();
        try{
          $getOssInfo=self::$oss->uploadFile($bucket, $object, $filepath);
          $result['url'] = $getOssInfo['info']['url'];
          if($getOssInfo['info']['url']){
            @unlink(substr($_path, 1));
          }
        }catch(OssException $e){
          var_dump($e);
          return;
        };
        $url=$result['url'];
        return $url;
        // var_dump("$url");die();
    
       //   $res = true;
        //   return $url;
      }
    
    
      /**
       * 删除指定文件
       * @param $object 被删除的文件名
       * @return bool  删除是否成功
       */
      public function delete($object)
      {
        $res = false;
        $bucket = Yii::$app->params['oss']['bucket'];  //获取阿里云oss的bucket
        if (self::$oss->deleteObject($bucket, $object)){
        //调用deleteObject方法把服务器文件上传到阿里云oss
          $res = true;
        }
        return $res;
      }
    
    //测试
      public function test(){
        echo 123;
        echo "success";
      }
    }

    7、在根目录/common/config/main.php,添加:

      'Aliyunoss' => [
        'class' => 'common\components\Aliyunoss',
       ],


    8、在根目录/common/config/params.php,添加sdk信息,代码需要自行修改

    'oss' =>[                     //阿里云OSS
        'ossServer' => 'oss-cn-   .aliyuncs.com', //服务器外网地址,
        'ossServerInternal' => 'oss-cn-   .aliyuncs.com', //服务器内网地址
        'accessKeyId'=>'    ',
        'accessKeySecret'=>'     ',
        'bucket' => '    ',
        'endPoint' => '     ',
      ],

    9、根目录/backend/controllers/控制器名.php,里面引用文件

    //阿里云OSS执行
    use common\components\Aliyunoss;

    由于上传图片限制,自此至下面就看代码了

    10、准备上传图片数据,

     public function actionAdd(){
        $img_banner = trim($_FILES['vend_banner']['name']);
        $img_banner = explode('.',$img_banner);
        $imgs_banner = $img_banner[1];
        $img_banner = date('YmdHis').mt_rand(100,1000).md5($img_banner[0]);
        //文件重命名
        $vend_banners = "./images/upload/".$img_banner.'.'.$imgs_banner; 
        $vend_banner = $img_banner.'.'.$imgs_banner; 
       
        $uploadPath = dirname(dirname(__FILE__)).'/web/images/upload/'; // 取得临时文件路径
          if (!file_exists($uploadPath)) {
            @mkdir($uploadPath, 0777, true);
          }
        $file_Path_vend_banner = $uploadPath.$vend_banner;
        $filepath_vend_banner=str_replace("\\", "/",$file_Path_vend_banner);//绝对路径,上传第二个参数
        $object_vend_banner="data/Company/".$vend_banner;      //拼接存储路径和文件名称,上传第一个参数
        if(is_uploaded_file($_FILES['vend_banner']['tmp_name'])){ //判断是否post上传
          if(!move_uploaded_file($_FILES['vend_banner']['tmp_name'],$vend_banners)){
            //移动到临时目录里
            echo 'banner上传失败';exit();
          }
        }
        $vend_banner_url = Yii::$app->Aliyunoss->upload($object_vend_banner,$filepath_vend_banner);
         //调用新建的文件,执行OSS上传,返回的是上传到阿里云的OSS文件路径,打印出来是:
        //string(116) "http:// ******.oss-cn-******.aliyuncs.com/data/Company/20170908124236303cc17c30cd111c7215fc8f51f8790e0e1.jpg"

    11、删除图片

    $oss_url=$data2[0]['vend_banner'];//只要(上传时候的)图片名,
    $object="data/Company/".$oss_url; //将你阿里云的存储路径+图片名=组成数据
    $is_del = Yii::$app->Aliyunoss->delete($object);//删除指定的图片,返回true,否则返回false

    相关推荐:

    thinkPHP简单导入和使用阿里云OSSsdk的方法

    以上就是Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Yii2.0 图片 上传
    上一篇:PHP isset()与empty()的使用区别 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 聊聊php百万数据怎么写入csv• PhpMyAdmin中无法导入sql文件的解决办法• php后台如何避免用户直接进入方法实例_php实例• 关于phpcms 中头像下传 那位高手说上怎么实现的• 请问下php的zend加密的有关问题
    1/1

    PHP中文网