1. 程式人生 > >tp框架 阿里雲oss 上傳 ,刪除,判斷是不是存在

tp框架 阿里雲oss 上傳 ,刪除,判斷是不是存在

composer require aliyuncs/oss-sdk-php 

配置檔案如下

	'ALIOSS_CONFIG' => array(
        'KEY_ID' => '',
        'KEY_SECRET' => '',
        'END_POINT' => '',
        'BUCKET' => '',
		"OSS_WEB_SITE"=>'',
//		這個OSS_WEB_SITE是oss的bucket建立後的外網訪問地址,如需二級域名,可以指向二級域名,具體可以參考阿里雲控制檯裡面的oss'oss_maxSize'=>1048576,    //1M
		'OSS_EXTS' =>array(// 設定附件上傳型別
		                'image/jpg',
		                'image/gif',
		                'image/png',
		                'image/jpeg',
		                'application/octet-stream',//阿里雲好像都是通過二進位制上傳,似乎上面4個字尾設定起到什麼用?
		            ),

        ),

控制器 

<?php
namespace Admin\Controller;
use Think\Controller;

class AliossController extends Controller
{


	/**
	 * 2
	 * 例項化阿里雲oos
	 * 3
	 * @return object 例項化得到的物件
	 * 4
	 */

	public function new_oss()
	{
		vendor('Alioss.autoload');

		$config = C('ALIOSS_CONFIG');

		$oss = new \OSS\OssClient($config['KEY_ID'], $config['KEY_SECRET'], $config['END_POINT']);

		return $oss;

	}

	/* 上傳檔案到oss並刪除本地檔案
	14
	* @param  string $path 檔案路徑
	15
	* @return bollear      是否上傳
	16
	*/

	public function oss_upload($path)
	{

// 獲取bucket名稱

		$bucket = C('ALIOSS_CONFIG.BUCKET');
// 先統一去除左側的.或者/ 再新增./
		if(!$path){
			return false;
		}
		$oss_path = ltrim($path, '/');

		$path = './' . $oss_path;

		if (file_exists($path)) {

			// 例項化oss類

			$oss = $this->new_oss();

			// 上傳到oss  
			$result  = $oss->uploadFile($bucket, $oss_path, $path);
			// 如需上傳到oss後 自動刪除本地的檔案 則刪除下面的註釋
			unlink($path);
			return $result;
//			var_dump( $result);

		} else {

//			var_dump('2');

			return false;

		}
	}



	/* 刪除oss上指定檔案
	40
	* @param  string $object 檔案路徑 例如刪除 /Public/README.md檔案  傳Public/README.md 即可
	 *
	 */

	public function oss_delet_object($path)
	{
		// 例項化oss類

		if(!$path){
			var_dump("1");
			return array('status'=>1, 'msg'=>'要刪除的圖片不能為空');

		}
		$oss = $this->new_oss();

// 獲取bucket名稱

		$bucket = C('ALIOSS_CONFIG.BUCKET');


		try{
			$path =ltrim($path,'/'); //坑 不能有斜杆
			$test = $oss->deleteObject($bucket, $path);
			return true;
		}catch (OssException $e){
//			var_dump($e->getMessage());
			return false;
		}


	}


	/* 獲取完整網路連線
	52
	* @param  string $path 檔案路徑
	53
	* @return string       http連線
	54
	*/

	public function get_url($path)
	{

		// 如果是空;返回空

		if (empty($path)) {

			return '';

		}

		// 如果已經有http直接返回

		if (strpos($path, 'http://') !== false) {

			return $path;

		}
		$alioss = C('ALIOSS_CONFIG');

		if (empty($alioss['KEY_ID'])) {
			return 'http://' . $_SERVER['HTTP_HOST'] . $path;
		} else {
			return 'http://' . $alioss['BUCKET'] . '.' . $alioss['END_POINT'] . $path;
		}
	}



// 這個在叫到控制器中用
	public function upFile()
	{
		$uplode = new \Think\Upload();//造例項化物件:造一個上傳檔案的類    
		$uplode->maxSize = "31457280";//上傳檔案的大小
		$uplode->exts = array('jpg', 'gif', 'png', 'jpeg');//設定圖片格式
		$uplode->autoSub = true;//自動使用子目錄儲存上傳檔案 預設為true    
		$uplode->subName = array('date', 'Ymd');//檔案命名方式已時期時間戳命名
		$uplode->rootPath = "./public/";//表示在public資料夾下
		$uplode->savePath = "./Uploads/";//設定附件上傳目錄:表示在public資料夾下自動建一個Uploads資料夾
// 上傳檔案
		$info = $uplode->upload();
		if (!$info) {
// 上傳錯誤提示錯誤資訊    
			$this->error($uplode->getError());
		} else {
			// 上傳成功 獲取上傳檔案資訊
			foreach ($info as $file) {
				$path = $file['savepath'] . $file['savename'];
				$filename = $file['savename'];
			}
		}
		$path = '/public' . $path; //必須要加上完整的路徑,否則在呼叫上傳OSS方法的時候會判斷該檔案不存在。且'./Public/'最前面的點需要去掉,為了後面獲取路徑;
		$res = $this->oss_upload($path);
		if ($res) {
			$file = get_url($path);
		}
		echo $file;
		//上傳到OSS的圖片訪問地址

	}

//oss 檔案是否存在
	public function isfile($options){
//		$options="Uploads/Editor/2018-09-03/5b8d30001a348.jpg" //不能有 /
		$oss = $this->new_oss();
		$bucket = C('ALIOSS_CONFIG.BUCKET');

		$listObjectInfo = $oss->doesObjectExist($bucket, $options);
//		var_dump($listObjectInfo);
		return $listObjectInfo;

	}






}