tp框架 阿里雲oss 上傳 ,刪除,判斷是不是存在
阿新 • • 發佈:2018-11-19
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; } }