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的知识
Nov 17 PHP
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
Php 构造函数construct的前下划线是双的_
Dec 08 PHP
PHP 截取字符串专题集合
Aug 19 PHP
探讨PHP中OO之静态关键字以及类常量的详解
Jun 07 PHP
ThinkPHP之N方法实例详解
Jun 20 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
Apr 09 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
Mar 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邮件类
2007/01/03 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Python 转换文本编码实现解析
2019/08/27 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
tensorflow安装成功import tensorflow 出现问题
2020/04/16 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
生物医学工程专业学生求职信范文分享
2013/12/14 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
使用scrapy实现增量式爬取方式
2022/06/21 Python