Yii2.0使用阿里云OSS的SDK上傳圖片、下載、刪除圖片示例
之前從沒(méi)接觸過(guò)Yii,借助的各方資源來(lái)做的這個(gè)整合阿里云OSS的SDK上傳圖片實(shí)例,如果有不正之處請(qǐng)指出!
前面參照了weinirumo 的介紹,大家可以自行去查看。
好了,下面開(kāi)始進(jìn)入主題:
準(zhǔn)備工作:需要使用composer執(zhí)行命令,如果沒(méi)有安裝composer的需要提前安裝,參考文檔:composer安裝流程
1、項(xiàng)目目錄結(jié)構(gòu)
我使用的是基礎(chǔ)版,只有后臺(tái)目錄,請(qǐng)自行對(duì)照自己的項(xiàng)目目錄結(jié)構(gòu),會(huì)用到以下的幾個(gè)目錄:

2、在項(xiàng)目根目錄下運(yùn)行cmd命令


3、執(zhí)行composer命令
切換到中國(guó)國(guó)內(nèi)鏡像
執(zhí)行加載SDK命令
composer require aliyuncs/oss-sdk-php

4、查看根目錄/vendor/里面,會(huì)增加以下目錄文件,說(shuō)明安裝依賴文件成功:

5、在根目錄/common/里面新建components目錄,新建Aliyunoss.php文件
需要注意項(xiàng)目的命名空間,引入文件

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); //實(shí)例化OssClient對(duì)象
}
/**
* 使用阿里云oss上傳文件
* @param $object 保存到阿里云oss的文件名
* @param $filepath 文件在本地的絕對(duì)路徑
* @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)){
//調(diào)用deleteObject方法把服務(wù)器文件上傳到阿里云oss
$res = true;
}
return $res;
}
//測(cè)試
public function test(){
echo 123;
echo "success";
}
}
7、在根目錄/common/config/main.php,添加:
'Aliyunoss' => [
'class' => 'common\components\Aliyunoss',
],

8、在根目錄/common/config/params.php,添加sdk信息,代碼需要自行修改
'oss' =>[ //阿里云OSS
'ossServer' => 'oss-cn- .aliyuncs.com', //服務(wù)器外網(wǎng)地址,
'ossServerInternal' => 'oss-cn- .aliyuncs.com', //服務(wù)器內(nèi)網(wǎng)地址
'accessKeyId'=>' ',
'accessKeySecret'=>' ',
'bucket' => ' ',
'endPoint' => ' ',
],

9、根目錄/backend/controllers/控制器名.php,里面引用文件
//阿里云OSS執(zhí)行 use common\components\Aliyunoss;
由于上傳圖片限制,自此至下面就看代碼了
10、準(zhǔn)備上傳圖片數(shù)據(jù),
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/'; // 取得臨時(shí)文件路徑
if (!file_exists($uploadPath)) {
@mkdir($uploadPath, 0777, true);
}
$file_Path_vend_banner = $uploadPath.$vend_banner;
$filepath_vend_banner=str_replace("\\", "/",$file_Path_vend_banner);//絕對(duì)路徑,上傳第二個(gè)參數(shù)
$object_vend_banner="data/Company/".$vend_banner; //拼接存儲(chǔ)路徑和文件名稱,上傳第一個(gè)參數(shù)
if(is_uploaded_file($_FILES['vend_banner']['tmp_name'])){ //判斷是否post上傳
if(!move_uploaded_file($_FILES['vend_banner']['tmp_name'],$vend_banners)){
//移動(dòng)到臨時(shí)目錄里
echo 'banner上傳失敗';exit();
}
}
$vend_banner_url = Yii::$app->Aliyunoss->upload($object_vend_banner,$filepath_vend_banner);
//調(diào)用新建的文件,執(zhí)行OSS上傳,返回的是上傳到阿里云的OSS文件路徑,打印出來(lái)是:
//string(116) "http:// ******.oss-cn-******.aliyuncs.com/data/Company/20170908124236303cc17c30cd111c7215fc8f51f8790e0e1.jpg"
11、刪除圖片
$oss_url=$data2[0]['vend_banner'];//只要(上傳時(shí)候的)圖片名, $object="data/Company/".$oss_url; //將你阿里云的存儲(chǔ)路徑+圖片名=組成數(shù)據(jù) $is_del = Yii::$app->Aliyunoss->delete($object);//刪除指定的圖片,返回true,否則返回false
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Yii2使用表單上傳文件的實(shí)例代碼
- Yii2使用自帶的UploadedFile實(shí)現(xiàn)的文件上傳
- Yii2組件之多圖上傳插件FileInput的詳細(xì)使用教程
- yii2整合百度編輯器umeditor及umeditor圖片上傳問(wèn)題的解決辦法
- Yii2實(shí)現(xiàn)ajax上傳圖片插件用法
- yii2利用自帶UploadedFile實(shí)現(xiàn)上傳圖片的示例
- yii2 上傳圖片的示例代碼
- yii2高級(jí)應(yīng)用之自定義組件實(shí)現(xiàn)全局使用圖片上傳功能的方法
- yii2.0整合阿里云oss上傳單個(gè)文件的示例
- Yii2.0多文件上傳實(shí)例說(shuō)明
- yii2多圖上傳組件的使用教程
- YII2框架實(shí)現(xiàn)表單中上傳單個(gè)文件的方法示例
相關(guān)文章
詳解WordPress中提醒安裝插件以及隱藏插件的功能實(shí)現(xiàn)
這篇文章主要介紹了WordPress中提醒安裝插件以及隱藏插件的功能實(shí)現(xiàn),這兩種功能通常在多用戶模式下進(jìn)行管理時(shí)用得比較多,需要的朋友可以參考下2015-12-12
PHP使用SOAP調(diào)用.net的WebService數(shù)據(jù)
需要和一個(gè).net系統(tǒng)進(jìn)行數(shù)據(jù)交換,對(duì)方提供了一個(gè)WebService接口,使用PHP如何調(diào)用這個(gè)數(shù)據(jù)呢,下面就看看使用SOAP調(diào)用的方法吧2013-11-11
php處理靜態(tài)頁(yè)面:頁(yè)面設(shè)置緩存時(shí)間實(shí)例
本篇文章主要介紹了php處理靜態(tài)頁(yè)面:頁(yè)面設(shè)置緩存時(shí)間實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
Laravel框架實(shí)現(xiàn)超簡(jiǎn)單的分頁(yè)效果示例
這篇文章主要介紹了Laravel框架實(shí)現(xiàn)超簡(jiǎn)單的分頁(yè)效果,結(jié)合實(shí)例形式分析了Laravel框架實(shí)現(xiàn)分頁(yè)功能的相關(guān)控制器、視圖、模板調(diào)用等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
PHP實(shí)現(xiàn)Google plus的好友拖拽分組效果
本篇文章使用PHP和jQuery實(shí)現(xiàn)了同樣的好友拖拽添加分組的應(yīng)用。以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也我的示例會(huì)對(duì)你的社交網(wǎng)站項(xiàng)目有所幫助。2016-10-10

