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 相关文章推荐
4.与数据库的连接
Oct 09 PHP
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
将RTF格式的文件转成HTML并在网页中显示的代码
Oct 09 PHP
服务器端解压缩zip的脚本
Dec 22 PHP
用header 发送cookie的php代码
Mar 16 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
PHP线程的内存回收问题
Jul 08 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
May 04 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
PHP文件管理之实现网盘及压缩包的功能操作
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
PHP文件系统管理(实例讲解)
Sep 19 #PHP
You might like
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
PHP实现递归的三种方法
2020/07/04 PHP
JavaScript 对象模型 执行模型
2009/12/06 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
微信小程序页面上下滚动效果
2020/11/18 Javascript
用python写asp详细讲解
2013/12/16 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
使用Python和Prometheus跟踪天气的使用方法
2019/05/06 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python读取Kafka实例
2019/12/23 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
如何利用Python 进行边缘检测
2020/10/14 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
python 实现IP子网计算
2021/02/18 Python
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
施华洛世奇天猫官方旗舰店:SWAROVSKI
2017/04/17 全球购物
保安自我鉴定范文
2013/12/08 职场文书
环境科学专业优秀毕业生自荐书
2014/02/03 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL