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 相关文章推荐
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
Dec 29 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
PHP下载文件函数与用法示例
Sep 27 PHP
PHP执行普通shell命令流程解析
Aug 24 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
ThinkPHP使用smarty模板引擎的方法
2014/07/01 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
jQuery实现鼠标经过图片变亮其他变暗效果
2015/05/08 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
AngularJS入门教程之数据绑定原理详解
2016/11/02 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
原生JS实现音乐播放器的示例代码
2021/02/25 Javascript
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
Python列表的切片实例讲解
2019/08/20 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
python with (as)语句实例详解
2020/02/04 Python
如何使用Cython对python代码进行加密
2020/07/08 Python
语文高效课堂实施方案
2014/05/03 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2015年为民办实事工作总结
2015/05/26 职场文书
学生会工作感言
2015/08/07 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
公证书
2019/04/17 职场文书
小学记事作文之200字
2019/08/06 职场文书
Redis可视化客户端小结
2021/06/10 Redis