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 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
PHP中去掉字符串首尾空格的方法
May 19 PHP
探讨php中防止SQL注入最好的方法是什么
Jun 10 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
Mar 21 PHP
php_pdo 预处理语句详解
Nov 21 PHP
PHP面相对象中的重载与重写
Feb 13 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
浅谈laravel 5.6 安装 windows上使用composer的安装过程
Oct 18 PHP
深入解析PHP底层机制及相关原理
Dec 11 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/10 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
PHP实现可精确验证身份证号码的工具类示例
2018/05/31 PHP
Gambit vs CL BO3 第一场 2.13
2021/03/10 DOTA
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
jquery 合并内容相同的单元格(示例代码)
2013/12/13 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
基于JavaScript实现移动端无限加载分页
2017/03/27 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
Python中logging实例讲解
2019/01/17 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
英国领先的亚洲旅游专家:Wendy Wu Tours
2018/01/21 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
年终总结会议主持词
2014/03/17 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
平安工地建设方案
2014/05/06 职场文书
建筑工地宣传标语
2014/06/18 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
第四次工业革命,打工人与机器人的竞争
2022/04/21 数码科技