文档

PHP列举文件

更新时间:

本文介绍如何列举指定存储空间下(Bucket)的所有文件(Object)、指定个数的文件、指定前缀的文件等。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见新建OssClient

  • 要列举文件,您必须有oss:ListObjects权限。具体操作,请参见为RAM用户授权自定义的权限策略

简单列举文件

您可以通过listObjects或者listObjectsV2两种方法列举指定Bucket中根目录下的文件(不包含目录及目录下的文件)。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举examplebucket根目录下的文件(不包含目录及目录下的文件),默认列举100个文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    try {
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        $provider = new EnvironmentVariableCredentialsProvider();
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        // 填写Bucket名称,例如examplebucket。
        $bucket= "examplebucket";
        $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,        
        );
        $ossClient = new OssClient($config);
        $listObjectInfo = $ossClient->listObjects($bucket);
        printf("Bucket Name: %s". "\n",$listObjectInfo->getBucketName());
        printf("Prefix: %s". "\n",$listObjectInfo->getPrefix());
        printf("Marker: %s". "\n",$listObjectInfo->getMarker());
        printf("Next Marker: %s". "\n",$listObjectInfo->getNextMarker());
        printf("Max Keys: %s". "\n",$listObjectInfo->getMaxKeys());
        printf("Delimiter: %s". "\n",$listObjectInfo->getDelimiter());
        printf("Is Truncated: %s". "\n",$listObjectInfo->getIsTruncated());
        $objectList = $listObjectInfo->getObjectList();
        $prefixList = $listObjectInfo->getPrefixList();
        if (!empty($objectList)) {
            print("objectList:\n");
            foreach ($objectList as $objectInfo) {
                printf("Object Name: %s". "\n",$objectInfo->getKey());
                printf("Object Size: %s". "\n",$objectInfo->getSize());
                printf("Object Type: %s". "\n",$objectInfo->getType());
                printf("Object ETag: %s". "\n",$objectInfo->getETag());
                printf("Object Last Modified: %s". "\n",$objectInfo->getLastModified());
                printf("Object Storage Class: %s". "\n",$objectInfo->getStorageClass());
    
                if ($objectInfo->getRestoreInfo()){
                    printf("Restore Info: %s". "\n",$objectInfo->getRestoreInfo() );
                }
    
                if($objectInfo->getOwner()){
                    printf("Owner Id:".$objectInfo->getOwner()->getId() . "\n");
                    printf("Owner Name:".$objectInfo->getOwner()->getDisplayName() . "\n");
                }
            }
        }
        if (!empty($prefixList)) {
            print("prefixList: \n");
            foreach ($prefixList as $prefixInfo) {
                printf("Common Prefix:%s\n",$prefixInfo->getPrefix());
            }
        }
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举指定examplebucket根目录下的文件(不包含目录及目录下的文件),默认列举100个文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\Core\OssException;
    
    try {
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        $provider = new EnvironmentVariableCredentialsProvider();
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        $endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
        // 填写Bucket名称,例如examplebucket。
        $bucket= "examplebucket";
        $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,        
        );
        $ossClient = new OssClient($config);
        $listObjectInfo = $ossClient->listObjectsV2($bucket);
        printf("Bucket Name: %s". "\n",$listObjectInfo->getBucketName());
        printf("Prefix: %s". "\n",$listObjectInfo->getPrefix());
        printf("Next Continuation Token: %s". "\n",$listObjectInfo->getNextContinuationToken());
        printf("Continuation Token: %s". "\n",$listObjectInfo->getContinuationToken());
        printf("Max Keys: %s". "\n",$listObjectInfo->getMaxKeys());
        printf("Key Count: %s". "\n",$listObjectInfo->getKeyCount());
        printf("Delimiter: %s". "\n",$listObjectInfo->getDelimiter());
        printf("Is Truncated: %s". "\n",$listObjectInfo->getIsTruncated());
        printf("Start After: %s". "\n",$listObjectInfo->getStartAfter());
        $objectList = $listObjectInfo->getObjectList(); 
        $prefixList = $listObjectInfo->getPrefixList();
        if (!empty($objectList)) {
            print("objectList:\n");
            foreach ($objectList as $objectInfo) {
                printf("Object Name: %s". "\n",$objectInfo->getKey());
                printf("Object Size: %s". "\n",$objectInfo->getSize());
                printf("Object Type: %s". "\n",$objectInfo->getType());
                printf("Object ETag: %s". "\n",$objectInfo->getETag());
                printf("Object Last Modified: %s". "\n",$objectInfo->getLastModified());
                printf("Object Storage Class: %s". "\n",$objectInfo->getStorageClass());
    
                if ($objectInfo->getRestoreInfo()){
                    printf("Restore Info: %s". "\n",$objectInfo->getRestoreInfo() );
                }
    
                if($objectInfo->getOwner()){
                    printf("Owner Id:".$objectInfo->getOwner()->getId() . "\n");
                    printf("Owner Name:".$objectInfo->getOwner()->getDisplayName() . "\n");
                }
            }
        }
        if (!empty($prefixList)) {
            print("prefixList: \n");
            foreach ($prefixList as $prefixInfo) {
                printf("Common Prefix:%s\n",$prefixInfo->getPrefix());
            }
        }
    } catch (OssException $e) {
        printf($e->getMessage() . "\n");
        return;
    }
    
    

列举指定个数的文件

您可以通过listObjects或者listObjectsV2两种方法列举指定Bucket下指定个数的文件。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举examplebucket下的200个文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 设置最大个数为200。
    $maxkeys = 200;
    $options = array(
      'max-keys' => $maxkeys,
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList(); 
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举examplebucket下的200个文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 设置最大个数为200。
    $maxkeys = 200;
    $options = array(
      'max-keys' => $maxkeys,
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList(); 
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }

列举指定前缀的文件

您可以通过listObjects或者listObjectsV2两种方法列举某个Bucket下指定前缀的文件。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举examplebucket下前缀为dir的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定前缀为dir。
    $prefix = 'dir/';
    $options = array(
      'prefix' => $prefix,
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举examplebucket下前缀为dir的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定前缀为dir。
    $prefix = 'dir/';
    $options = array(
      'prefix' => $prefix,
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }

列举字母序排在指定名称之后的文件

您可以通过listObjects或者listObjectsV2两种方法列举字母序排在指定名称之后的文件。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举examplebucket中字母序排在test.txt之后的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 设置marker,例如test.txt。指定该参数后,以marker为起点按文件名称的字母排序返回文件。
    $marker = "test.txt";
    $options = array(
      OssClient::OSS_MARKER=>$marker
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList(); 
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举examplebucket中字母序排在test.txt之后的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 设置startAfter,例如test.txt。指定该参数后,以startAfter为起点按文件名称的字母排序返回文件。
    $startAfter = "test.txt";
    $options = array(
      OssClient::OSS_START_AFTER=>$startAfter
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
    } catch (OssException $e) {
      printf($e->getMessage() . "\n");
        return;
    }
    
    $objectList = $listObjectInfo->getObjectList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
          print($objectInfo->getKey() . "\n");
      }
    }

分页列举所有文件

您可以通过listObjects或者listObjectsV2两种方法分页列举所有文件。每页列举的文件个数通过maxKeys指定。

  • 通过listObjects方法

    以下代码用于通过listObjects方法分页列举examplebucket中的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
        // 设置每页列举200个文件。
        OssClient::OSS_MAX_KEYS=>200
    );
    do{
        $result = $ossClient->listObjects($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
        $options[OssClient::OSS_MARKER] = $result->getNextMarker();
    }while($result->getIsTruncated() === 'true');
  • 通过listObjectsV2

    以下代码用于通过listObjectsV2方法分页列举examplebucket中的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
        // 设置每页列举200个文件。
        OssClient::OSS_MAX_KEYS=>200
    );
    do{
        $result = $ossClient->listObjectsV2($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
        $options[OssClient::OSS_CONTINUATION_TOKEN] = $result->getNextContinuationToken();
    }while($result->getIsTruncated() === 'true');

分页列举指定前缀的文件

您可以通过listObjects或者listObjectsV2两种方法分页列举指定前缀的文件。

  • 通过listObjects方法

    以下代码用于通过listObjects方法分页列举examplebucket中前缀为dir的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定每页列举100个文件。
    $maxKeys = 100;
    // 指定前缀,例如dir。
    $prefix = 'dir/';
    $options = array(
        OssClient::OSS_MAX_KEYS =>$maxKeys,
        OssClient::OSS_PREFIX =>$prefix
    );
    do{
        $result = $ossClient->listObjects($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
        $options[OssClient::OSS_MARKER] = $result->getNextMarker();
    }while($result->getIsTruncated() === 'true');
  • 通过listObjectsV2

    以下代码用于通过listObjectsV2方法分页列举examplebucket中前缀为dir的文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定每页列举100个文件。
    $maxKeys = 100;
    // 指定前缀,例如dir。
    $prefix = 'dir/';
    $options = array(
        OssClient::OSS_MAX_KEYS =>$maxKeys,
        OssClient::OSS_PREFIX =>$prefix
    );
    do{
        $result = $ossClient->listObjectsV2($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
        $options[OssClient::OSS_CONTINUATION_TOKEN] = $result->getNextContinuationToken();
    }while($result->getIsTruncated() === 'true');

指定文件名称编码

如果文件名称含有以下特殊字符,需要进行编码传输。OSS目前仅支持URL编码。

  • 单引号(' ')

  • 双引号(" ")

  • and符号(&)

  • 尖括号(< >)

  • 顿号(、)

  • 中文

您可以通过listObjects或者listObjectsV2两种方法指定文件名称编码。

  • 通过listObjects方法

    以下代码用于通过listObjects方法指定文件名称编码。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
        // 指定文件名称编码方式为URL。
        OssClient::OSS_ENCODING_TYPE=>'url',
        // 指定每页列举20个文件。
        OssClient::OSS_MAX_KEYS=>20
    );
    do{
        $result = $ossClient->listObjects($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
    
        print("prefix:\n");
        $prefixList = $result->getPrefixList();
        foreach ($prefixList as $prefixInfo) {
            print($prefixInfo->getPrefix() . "\n");
        }
    
        if($result->getDelimiter() != null){
            printf("delimiter:".$result->getDelimiter().PHP_EOL);
        }
    
        if($result->getMarker() != null){
            printf("marker:".$result->getMarker().PHP_EOL);
        }
    
         $options[OssClient::OSS_MARKER] = $result->getNextMarker();
    }while($result->getIsTruncated() === 'true');
  • 通过listObjectsV2

    以下代码用于通过listObjectsV2方法指定文件名称编码。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
        // 指定文件名称编码方式为URL。
        OssClient::OSS_ENCODING_TYPE=>'url',
        // 指定每页列举20个文件。
        OssClient::OSS_MAX_KEYS=>20
    );
    do{
        $result = $ossClient->listObjectsV2($bucket,$options);
        $objectList = $result->getObjectList();
        print("objectList:\n");
        foreach ($objectList as $objectInfo) {
            print($objectInfo->getKey() . "\n");
        }
    
        print("prefix:\n");
        $prefixList = $result->getPrefixList();
        foreach ($prefixList as $prefixInfo) {
            print($prefixInfo->getPrefix() . "\n");
        }
    
        if($result->getDelimiter() != null){
            printf("delimiter:".$result->getDelimiter().PHP_EOL);
        }
    
        if($result->getStartAfter() != null){
            printf("start after:".$result->getStartAfter().PHP_EOL);
        }
    
        $options[OssClient::OSS_CONTINUATION_TOKEN] = $result->getNextContinuationToken();
    }while($result->getIsTruncated() === 'true');

文件夹功能

OSS没有文件夹的概念,所有元素都是以文件来存储。创建文件夹本质上来说是创建了一个大小为0并以正斜线(/)结尾的文件。这个文件可以被上传和下载,控制台会对以正斜线(/)结尾的文件以文件夹的方式展示。

通过delimiter和prefix两个参数可以模拟文件夹功能:

  • 如果设置prefix为某个文件夹名称,则会列举以此prefix开头的文件,即该文件夹下所有的文件和子文件夹(目录)均显示为objects。

  • 如果在设置了prefix的情况下,将delimiter设置为正斜线(/),则只列举该文件夹下的文件和子文件夹(目录),该文件夹下的子文件夹(目录)显示为CommonPrefixes,子文件夹下的文件和文件夹不显示。

假设存储空间中包含文件oss.jpgfun/test.jpgfun/movie/001.avifun/movie/007.avi,以正斜线(/)作为文件夹的分隔符。以下示例说明了如何通过模拟文件夹的方式列举文件。

列举Bucket下的所有文件

您可以通过listObjects或者listObjectsV2两种方法列举指定Bucket下的所有文件。

  • 通过listObjects

    以下代码用于通过listObjects列举examplebucket下包含的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
      'delimiter' => '',
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket,$options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 通过listObjectsV2

    以下代码用于通过listObjectsV2列举examplebucket下包含的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    $options = array(
      'delimiter' => '',
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket,$options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 返回结果

    通过以上两种方法列举examplebucket下所有文件的返回结果如下。

    objectList:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg
    oss.jpg

列举指定目录下的所有文件

您可以通过listObjects或者listObjectsV2两种方法列举目录fun/下的所有文件。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举目录fun/下的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录为fun/。
    $prefix = 'fun/';
    $options = array(
      'prefix' => $prefix,
      'delimiter' => '',
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket, $options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举目录fun/下的所有文件。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录名称为fun/。
    $prefix = 'fun/';
    $options = array(
      'prefix' => $prefix,
      'delimiter' => '',
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 返回结果

    通过以上两种方法列举目录fun/下所有文件的返回结果如下。

    objectList:
    fun/movie/001.avi
    fun/movie/007.avi
    fun/test.jpg

列举目录下的文件和子目录

您可以通过listObjects或者listObjectsV2两种方法列举目录fun/下的文件和子目录。

  • 通过listObjects方法

    以下代码用于通过listObjects方法列举目录fun/下的文件和子目录。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
     $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录名称为fun/。
    $prefix = 'fun/';
    $delimiter = '/'; 
    $options = array(
      'delimiter' => $delimiter,
      'prefix' => $prefix,
    );
    try {
      $listObjectInfo = $ossClient->listObjects($bucket, $options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    // commonPrefixs列表中显示的是fun目录下的所有子文件夹。
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法列举目录fun/下的文件和子目录。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
     $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录名称为fun/。
    $prefix = 'fun/';
    $delimiter = '/';
    $options = array(
      'delimiter' => $delimiter,
      'prefix' => $prefix,
    );
    try {
      $listObjectInfo = $ossClient->listObjectsV2($bucket, $options);
    } catch (OssException $e) {
      printf(__FUNCTION__ . ": FAILED\n");
      printf($e->getMessage() . "\n");
      return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    $objectList = $listObjectInfo->getObjectList();
    $prefixList = $listObjectInfo->getPrefixList();
    if (!empty($objectList)) {
      print("objectList:\n");
      foreach ($objectList as $objectInfo) {
        print($objectInfo->getKey() . "\n");
      }
    }
    // commonPrefixs列表中显示的是fun/目录下的所有子文件夹。
    if (!empty($prefixList)) {
      print("prefixList: \n");
      foreach ($prefixList as $prefixInfo) {
        print($prefixInfo->getPrefix() . "\n");
      }
    }
  • 返回结果

    通过以上两种方法列举目录fun/下的文件和子目录的返回结果如下。

    objectList:
    fun/test.jpg
    prefixList:
    fun/movie/

获取指定目录下的文件大小

您可以通过listObjects或者listObjectsV2两种方法获取目录fun/的大小。

  • 通过listObjects方法

    以下代码用于通过listObjects方法获取fun/目录下的文件大小。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录名称为fun/。
    $prefix = 'fun/';
    $delimiter = '';
    $nextMarker = '';
    $maxkeys = 1000;
    $options = array(
        'delimiter' => $delimiter,
        'prefix' => $prefix,
        'max-keys' => $maxkeys,
        'marker' => $nextMarker,
    );
    $bool = true;
    $size = 0;
    while ($bool){
        $result = $ossClient->listObjects($bucket,$options);
        foreach ($result->getObjectList() as $objInfo){
            printf("object name".$objInfo->getKey().":" . ($objInfo->getSize() / 1024) . "KB".PHP_EOL);
            $size+=$objInfo->getSize();
        }
        if($result->getIsTruncated() === 'true'){
            $options['marker'] = $result->getNextMarker();
        }else{
            $bool = false;
        }
    }
    printf($prefix.":" . ($size / 1024) . "KB".PHP_EOL);
  • 通过listObjectsV2方法

    以下代码用于通过listObjectsV2方法获取fun/目录下的文件大小。

    <?php
    if (is_file(__DIR__ . '/../autoload.php')) {
        require_once __DIR__ . '/../autoload.php';
    }
    if (is_file(__DIR__ . '/../vendor/autoload.php')) {
        require_once __DIR__ . '/../vendor/autoload.php';
    }
    require_once __DIR__ . '/Common.php';
    use OSS\Credentials\EnvironmentVariableCredentialsProvider;
    use OSS\OssClient;
    use OSS\CoreOssException;
    
    // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。 
    $provider = new EnvironmentVariableCredentialsProvider();
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    $endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // 填写Bucket名称,例如examplebucket。
    $bucket= "examplebucket";
    
    $config = array(
            "provider" => $provider,
            "endpoint" => $endpoint,
        );
        $ossClient = new OssClient($config);
    // 指定目录名称为fun/。
    $prefix = 'fun/';
    $delimiter = '';
    $nextMarker = '';
    $maxkeys = 1000;
    $options = array(
        'delimiter' => $delimiter,
        'prefix' => $prefix,
        'max-keys' => $maxkeys,
    );
    $bool = true;
    $size = 0;
    while ($bool){
        $result = $ossClient->listObjectsV2($bucket,$options);
        foreach ($result->getObjectList() as $objInfo){
            printf("object name".$objInfo->getKey().":" . ($objInfo->getSize() / 1024) . "KB".PHP_EOL);
            $size+=$objInfo->getSize();
        }
        if($result->getIsTruncated() === 'true'){
            $options[OssClient::OSS_CONTINUATION_TOKEN] = $result->getNextContinuationToken();
        }else{
            $bool = false;
        }
    }
    printf($prefix.":" . ($size / 1024) . "KB".PHP_EOL);
  • 返回结果

    通过以上两种方法获取的文件大小的返回结果如下。

    object namefun/movie/001.avi:0.01953125KB
    object namefun/movie/007.avi:290.71875KB
    object namefun/test.jpg:144.216796875KB
    fun/:434.955078125KB

相关文档

  • 本页导读 (1)
文档反馈