listObjects() public méthode

获取bucket下的object列表
public listObjects ( string $bucket, array $options = NULL ) : OSS\Model\ObjectListInfo
$bucket string
$options array 其中options中的参数如下 $options = array( 'max-keys' => max-keys用于限定此次返回object的最大数,如果不设定,默认为100,max-keys取值不能大于1000。 'prefix' => 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。 'delimiter' => 是一个用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素 'marker' => 用户设定结果从marker之后按字母排序的第一个开始返回。 ) 其中 prefix,marker用来实现分页显示效果,参数的长度必须小于256字节。
Résultat OSS\Model\ObjectListInfo
 /**
  * List contents of a directory.
  *
  * @param string $directory
  * @param bool   $recursive
  * @return array
  */
 public function listContents($directory = '', $recursive = false)
 {
     $directory = $this->applyPathPrefix($directory);
     $bucket = $this->bucket;
     $delimiter = '/';
     $nextMarker = '';
     $maxkeys = 1000;
     $options = ['delimiter' => $delimiter, 'prefix' => $directory, 'max-keys' => $maxkeys, 'marker' => $nextMarker];
     $listObjectInfo = $this->client->listObjects($bucket, $options);
     $objectList = $listObjectInfo->getObjectList();
     // 文件列表
     $prefixList = $listObjectInfo->getPrefixList();
     // 目录列表
     $result = [];
     foreach ($objectList as $objectInfo) {
         if ($objectInfo->getSize() === 0 && $directory === $objectInfo->getKey()) {
             $result[] = ['type' => 'dir', 'path' => $this->removePathPrefix(rtrim($objectInfo->getKey(), '/')), 'timestamp' => strtotime($objectInfo->getLastModified())];
             continue;
         }
         $result[] = ['type' => 'file', 'path' => $this->removePathPrefix($objectInfo->getKey()), 'timestamp' => strtotime($objectInfo->getLastModified()), 'size' => $objectInfo->getSize()];
     }
     foreach ($prefixList as $prefixInfo) {
         if ($recursive) {
             $next = $this->listContents($this->removePathPrefix($prefixInfo->getPrefix()), $recursive);
             $result = array_merge($result, $next);
         } else {
             $result[] = ['type' => 'dir', 'path' => $this->removePathPrefix(rtrim($prefixInfo->getPrefix(), '/')), 'timestamp' => 0];
         }
     }
     return $result;
 }
Exemple #2
0
 public function tearDown()
 {
     if (!$this->ossClient->doesBucketExist($this->bucket)) {
         return;
     }
     $objects = $this->ossClient->listObjects($this->bucket, array('max-keys' => 1000, 'delimiter' => ''))->getObjectList();
     $keys = array();
     foreach ($objects as $obj) {
         $keys[] = $obj->getKey();
     }
     if (count($keys) > 0) {
         $this->ossClient->deleteObjects($this->bucket, $keys);
     }
     $uploads = $this->ossClient->listMultipartUploads($this->bucket)->getUploads();
     foreach ($uploads as $up) {
         $this->ossClient->abortMultipartUpload($this->bucket, $up->getKey(), $up->getUploadId());
     }
     $this->ossClient->deleteBucket($this->bucket);
 }
Exemple #3
0
/**
 * 列出Bucket内所有目录和文件, 根据返回的nextMarker循环得到所有Objects
 *
 * @param OssClient $ossClient OssClient实例
 * @param string $bucket 存储空间名称
 * @return null
 */
function listAllObjects($ossClient, $bucket)
{
    //构造dir下的文件和虚拟目录
    for ($i = 0; $i < 100; $i += 1) {
        $ossClient->putObject($bucket, "dir/obj" . strval($i), "hi");
        $ossClient->createObjectDir($bucket, "dir/obj" . strval($i));
    }
    $prefix = 'dir/';
    $delimiter = '/';
    $nextMarker = '';
    $maxkeys = 30;
    while (true) {
        $options = array('delimiter' => $delimiter, 'prefix' => $prefix, 'max-keys' => $maxkeys, 'marker' => $nextMarker);
        var_dump($options);
        try {
            $listObjectInfo = $ossClient->listObjects($bucket, $options);
        } catch (OssException $e) {
            printf(__FUNCTION__ . ": FAILED\n");
            printf($e->getMessage() . "\n");
            return;
        }
        // 得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表
        $nextMarker = $listObjectInfo->getNextMarker();
        $listObject = $listObjectInfo->getObjectList();
        $listPrefix = $listObjectInfo->getPrefixList();
        var_dump(count($listObject));
        var_dump(count($listPrefix));
        if ($nextMarker === '') {
            break;
        }
    }
}