当前位置:Gxlcms > PHP教程 > Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片

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

时间:2021-07-01 10:21:17 帮助过:26人阅读

本篇文章主要介绍了Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例,具有一定的参考价值,有兴趣的可以了解一下

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

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

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

1、项目目录结构

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

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


3、执行composer命令

切换到中国国内镜像

代码如下:

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

执行加载SDK命令

  1. composer require aliyuncs/oss-sdk-php

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

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

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

6、根目录/common/components/Aliyunoss.php代码:

  1. <?php
  2. /**
  3. * @Author: Marte
  4. * @Date: 2017-09-04 11:31:20
  5. * @Last Modified by: Marte
  6. * @Last Modified time: 2017-09-06 16:19:28
  7. */
  8. namespace common\components;
  9. use Yii;
  10. use yii\base\Component;
  11. use OSS\OssClient;
  12. use OSS\Croe\OssException;
  13. class Aliyunoss extends Component
  14. {
  15. public static $oss;
  16. public function __construct()
  17. {
  18. parent::__construct();
  19. $accessKeyId = Yii::$app->params['oss']['accessKeyId']; //获取阿里云oss的accessKeyId
  20. $accessKeySecret = Yii::$app->params['oss']['accessKeySecret']; //获取阿里云oss的accessKeySecret
  21. $endpoint = Yii::$app->params['oss']['endPoint']; //获取阿里云oss的endPoint
  22. self::$oss = new OssClient($accessKeyId, $accessKeySecret, $endpoint); //实例化OssClient对象
  23. }
  24. /**
  25. * 使用阿里云oss上传文件
  26. * @param $object 保存到阿里云oss的文件名
  27. * @param $filepath 文件在本地的绝对路径
  28. * @return bool 上传是否成功
  29. */
  30. public function upload($object, $filepath)
  31. {
  32. // $res = false;
  33. $bucket = Yii::$app->params['oss']['bucket']; //获取阿里云oss的bucket
  34. $result=array();
  35. try{
  36. $getOssInfo=self::$oss->uploadFile($bucket, $object, $filepath);
  37. $result['url'] = $getOssInfo['info']['url'];
  38. if($getOssInfo['info']['url']){
  39. @unlink(substr($_path, 1));
  40. }
  41. }catch(OssException $e){
  42. var_dump($e);
  43. return;
  44. };
  45. $url=$result['url'];
  46. return $url;
  47. // var_dump("$url");die();
  48. // $res = true;
  49. // return $url;
  50. }
  51. /**
  52. * 删除指定文件
  53. * @param $object 被删除的文件名
  54. * @return bool 删除是否成功
  55. */
  56. public function delete($object)
  57. {
  58. $res = false;
  59. $bucket = Yii::$app->params['oss']['bucket']; //获取阿里云oss的bucket
  60. if (self::$oss->deleteObject($bucket, $object)){
  61. //调用deleteObject方法把服务器文件上传到阿里云oss
  62. $res = true;
  63. }
  64. return $res;
  65. }
  66. //测试
  67. public function test(){
  68. echo 123;
  69. echo "success";
  70. }
  71. }

7、在根目录/common/config/main.php,添加:

  1. 'Aliyunoss' => [
  2. 'class' => 'common\components\Aliyunoss',
  3. ],


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

  1. 'oss' =>[ //阿里云OSS
  2. 'ossServer' => 'oss-cn- .aliyuncs.com', //服务器外网地址,
  3. 'ossServerInternal' => 'oss-cn- .aliyuncs.com', //服务器内网地址
  4. 'accessKeyId'=>' ',
  5. 'accessKeySecret'=>' ',
  6. 'bucket' => ' ',
  7. 'endPoint' => ' ',
  8. ],

9、根目录/backend/controllers/控制器名.php,里面引用文件

  1. //阿里云OSS执行
  2. use common\components\Aliyunoss;

由于上传图片限制,自此至下面就看代码了

10、准备上传图片数据,

  1. public function actionAdd(){
  2. $img_banner = trim($_FILES['vend_banner']['name']);
  3. $img_banner = explode('.',$img_banner);
  4. $imgs_banner = $img_banner[1];
  5. $img_banner = date('YmdHis').mt_rand(100,1000).md5($img_banner[0]);
  6. //文件重命名
  7. $vend_banners = "./images/upload/".$img_banner.'.'.$imgs_banner;
  8. $vend_banner = $img_banner.'.'.$imgs_banner;
  9. $uploadPath = dirname(dirname(__FILE__)).'/web/images/upload/'; // 取得临时文件路径
  10. if (!file_exists($uploadPath)) {
  11. @mkdir($uploadPath, 0777, true);
  12. }
  13. $file_Path_vend_banner = $uploadPath.$vend_banner;
  14. $filepath_vend_banner=str_replace("\\", "/",$file_Path_vend_banner);//绝对路径,上传第二个参数
  15. $object_vend_banner="data/Company/".$vend_banner; //拼接存储路径和文件名称,上传第一个参数
  16. if(is_uploaded_file($_FILES['vend_banner']['tmp_name'])){ //判断是否post上传
  17. if(!move_uploaded_file($_FILES['vend_banner']['tmp_name'],$vend_banners)){
  18. //移动到临时目录里
  19. echo 'banner上传失败';exit();
  20. }
  21. }
  22. $vend_banner_url = Yii::$app->Aliyunoss->upload($object_vend_banner,$filepath_vend_banner);
  23. //调用新建的文件,执行OSS上传,返回的是上传到阿里云的OSS文件路径,打印出来是:
  24. //string(116) "http:// ******.oss-cn-******.aliyuncs.com/data/Company/20170908124236303cc17c30cd111c7215fc8f51f8790e0e1.jpg"

11、删除图片

  1. $oss_url=$data2[0]['vend_banner'];//只要(上传时候的)图片名,
  2. $object="data/Company/".$oss_url; //将你阿里云的存储路径+图片名=组成数据
  3. $is_del = Yii::$app->Aliyunoss->delete($object);//删除指定的图片,返回true,否则返回false

相关推荐:

thinkPHP简单导入和使用阿里云OSSsdk的方法

以上就是Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行