PHP-阿里OSS列出bucket下或者‘某個目錄下’的所有檔案
阿新 • • 發佈:2019-01-28
阿里的oss中是沒有目錄這個概念的,所謂目錄 ,是檔案的字首來區分的。
/**
* 列出Bucket內所有目錄和檔案, 根據返回的nextMarker迴圈呼叫listObjects介面得到所有檔案和目錄
*
* @param $prefix 你要列出的檔案所在的目錄名
* @param $nextMarker 從上一次listObjects讀到的最後一個檔案的下一個檔案開始繼續獲取檔案列表
* @param $delimiter 為行使資料夾功能的分割符號,如 /
* @param $maxkeys max-keys用於限定此次返回object的最大數
*/
public function olists($prefix,$nextMarker='',$delimiter='/',$maxkeys=30)
{
$options = array(
'delimiter' => $delimiter,
'prefix' => $prefix,
'max-keys' => $maxkeys,
'marker' => $nextMarker,
);
try {
$listObjectInfo = $this->ossClient->listObjects($this->bucket, $options);
} catch (OssException $e) {
return $this->ci->error_code->oss_obj_lists_no($e->getMessage());
}
// 得到nextMarker,從上一次listObjects讀到的最後一個檔案的下一個檔案開始繼續獲取檔案列表
$nextMarker = $listObjectInfo ->getNextMarker();
$listObject = $listObjectInfo->getObjectList();
$listPrefix = $listObjectInfo->getPrefixList();
$list = array();
$list['nextMarker'] = $nextMarker;
foreach($listObject as $info){
$list['file'][] = array(
'name' => $info->getKey(),
'lastModified' => $info->getLastModified()
);
}
foreach($listPrefix as $info){
$list['dir'][] = array('name' => $info->getPrefix());
}
return $this->ci->error_code->oss_obj_lists_yes($list);
}