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


Posted in PHP onSeptember 20, 2017

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

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

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

1、项目目录结构

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

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

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

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

3、执行composer命令

切换到中国国内镜像

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

执行加载SDK命令

composer require aliyuncs/oss-sdk-php

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

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

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

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

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

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

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',
   ],

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

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

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
需要注意的几个PHP漏洞小结
Feb 05 PHP
深入了解PHP类Class的概念
Jun 14 PHP
Win下如何安装PHP的APC拓展
Aug 07 PHP
PHP设置一边执行一边输出结果的代码
Sep 30 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
PHP实现AES256加密算法实例
Sep 22 PHP
Symfony2安装的方法(2种方法)
Feb 04 PHP
php判断是否连接上网络的方法实例详解
Dec 14 PHP
php实现的中文分词类完整实例
Feb 06 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
Jun 25 PHP
PHP与Web页面的交互示例详解一
Aug 04 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 #PHP
PHP使用Nginx实现反向代理
Sep 20 #PHP
弹出模态框modal的实现方法及实例
Sep 19 #PHP
PHP 进度条函数的简单实例
Sep 19 #PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 #PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 #PHP
yii2.0整合阿里云oss的示例代码
Sep 19 #PHP
You might like
php学习笔记 数组遍历实现代码
2011/06/09 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
vue-mugen-scroll组件实现pc端滚动刷新
2019/08/16 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
python 实现生成均匀分布的点
2019/12/05 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
Russell Stover巧克力官方网站:美国领先的精美巧克力制造商
2016/11/27 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
英国50岁以上人群的交友网站:Ourtime
2018/03/28 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
财务与信息服务专业推荐信
2013/11/28 职场文书
邀请书格式范文
2015/02/02 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书