php 利用阿里雲oss實現託管檔案
阿新 • • 發佈:2019-02-15
首先需要下載阿里雲的php版sdk,然後引入載入檔案autoload.php
以下是我在使用時封裝的class
<?php include IA_ROOT . 'autoload.php'; use OSS\OssClient; //引入名稱空間 use OSS\Core\OssException; //引入名稱空間 class Alioss{ /** * 阿里雲 OSS雲端儲存類 * 參考 阿里雲連結 https://help.aliyun.com/document_detail/32101.html?spm=5176.doc32103.6.758.d8QJSr * $accessKeyId <從OSS獲得的 AccessKeyId> * $accessKeySecret <從OSS獲得的 AccessKeySecret> * $endpoint <選定的OSS資料中心訪問域名,例如 http://oss-cn-hangzhou.aliyuncs.com> * $bucket <使用的儲存空間名稱,注意命名規範> * */ private $accessKeyId = "";//阿里雲統一$accessKeyId private $accessKeySecret = "";//阿里雲統一$accessKeySecret private $endpoint = "";// 新建的bucket的endpoint,測試使用 private $bucket = "";// 新建的bucket,測試使用 /** * 新建一個儲存空間(Bucket) * $bucket 儲存空間名稱,名稱規範參考url: https://help.aliyun.com/document_detail/31827.html?spm=5176.doc32101.2.5.PMp0so * */ public function create_Bucket($bucket){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result = $ossClient->createBucket($bucket); if(is_array($result['info'])){ return $result['info']; }else{ return false; } } /** * 新建一個建立虛擬目錄(dir) * $bucket 儲存空間名稱,名稱規範參考url: https://help.aliyun.com/document_detail/31827.html?spm=5176.doc32101.2.5.PMp0so * 已存在的資料夾不會覆蓋 * */ public function create_ObjectDir($dir){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result = $ossClient->createObjectDir($this->bucket,$dir); if(is_array($result)){ return $result; }else{ return false; } } /** * 上傳本地檔案至 OSS * $filename 需要上傳檔案的檔名及字尾 例:test.txt * $filename 可指定存放的資料夾,預設存放在$bucket主目錄下 例:test/test.txt * $path 需要上傳的本地檔案路徑,絕對路徑 * */ public function upload_File($filename,$path){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result = $ossClient->uploadFile($this->bucket, $filename,$path); if(is_array($result['info'])){ return $result['info']; }else{ return false; } } /** * 上傳變數到 OSS * $filename 需要上傳檔案的檔名及字尾 例:test.txt * $filename 可指定存放的資料夾,預設存放在$bucket主目錄下 例:test/test.txt * $content 變數內容,只支援字串格式。 * */ public function put_Object($filename,$content){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result = $ossClient->putObject($this->bucket, $filename, $content); if(is_array($result['info'])){ return $result['info']; }else{ return false; } } /** * 將檔案從伺服器下載到本地 * $filename 需要下載的檔名(包含資料夾) 例:test/test.txt * $path 下載檔案的儲存路徑 * 詳情參考 https://help.aliyun.com/document_detail/32104.html?spm=5176.doc32101.2.9.ieZCNh#h2-u4E0Bu8F7Du6587u4EF6u5230u672Cu5730u6587u4EF6 * */ public function get_Object($filename,$path){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $options = array( OssClient::OSS_FILE_DOWNLOAD => $path, ); $result=$ossClient->getObject($this->bucket, $filename, $options); return $result; } /** * 判斷object是否存在 * $filename object的檔名(包含資料夾) 例:test/test.txt * $result 返回值為ture時表示檔案存在,false檔案不存在。 * */ public function does_ObjectExist($filename){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result=$ossClient->doesObjectExist($this->bucket, $filename); return $result; } /** * 刪除object * $filename object的檔名(包含資料夾) 例:test/test.txt * */ public function delete_Object($filename){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); $result=$ossClient->deleteObject($this->bucket, $filename); if(is_array($result['info'])){ return $result['info']; }else{ return false; } } /** * 列出Bucket內所有目錄和檔案, 注意如果符合條件的檔案數目超過設定的max-keys, 使用者需要使用返回的nextMarker作為入參,通過 * 迴圈呼叫ListObjects得到所有的檔案,具體操作見下面的 listAllObjects 示例 * * @param OssClient $ossClient OssClient例項 * @param string $bucket 儲存空間名稱 * @return null */ public function list_Objects($prefix='',$nextMarker='',$maxkeys=1000,$delimiter = '/'){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //$prefix = 'black/'; //需要查詢的目錄 //$delimiter = '/'; //去除資料夾 //$nextMarker = ''; //從檔案為名為$nextMarker的下一條開始查詢。 //$maxkeys = 1000; //最大返回條數 $options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker, ); $listObjectInfo=$ossClient->listObjects($this->bucket, $options); $objectList = $listObjectInfo->getObjectList(); // 檔案列表 if (!empty($objectList)) { foreach ($objectList as $objectInfo) { $filelist[]=$objectInfo->getKey();//檔案列表 } } return $filelist; } /** * 列出Bucket內所有目錄和檔案, 注意如果符合條件的檔案數目超過設定的max-keys, 使用者需要使用返回的nextMarker作為入參,通過 * 迴圈呼叫ListObjects得到所有的檔案,具體操作見下面的 listAllObjects 示例 * * @param OssClient $ossClient OssClient例項 * @param string $bucket 儲存空間名稱 * @return null */ public function list_dir_Objects($prefix='',$nextMarker='',$maxkeys=1000,$delimiter = '/'){ $ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint); //$prefix = 'black/'; //需要查詢的目錄,預設主目錄 //$delimiter = '/'; //去除資料夾 //$nextMarker = ''; //從檔案為名為$nextMarker的下一條開始查詢。 //$maxkeys = 1000; //最大返回條數 $options = array( 'delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker, ); $listObjectInfo=$ossClient->listObjects($this->bucket, $options); $prefixList = $listObjectInfo->getPrefixList(); // 目錄列表 if (!empty($prefixList)) { foreach ($prefixList as $prefixInfo) { $dirlist[]=$prefixInfo->getPrefix();//資料夾列表 } } return $dirlist; } }