
# 列举桶内多版本对象
#### 功能说明
列举桶内多版本对象，默认返回最大1000个多版本对象。
#### 方法定义
```
1. ObsClient->listVersions(array $parameter)
2. ObsClient->listVersionsAsync(array $parameter, callable $callback)
```
#### 请求参数
| **字段名**         | **类型**  | **约束** | **说明**                                                                                                                      |
|:---|:---|:---|:---|
| Bucket          | string  | 必选     | 桶名。                                                                                                                         |
| Prefix          | string  | 可选     | 限定返回的对象名必须带有Prefix前缀。                                                                                                       |
| KeyMarker       | string  | 可选     | 列举多版本对象的起始位置，返回的对象列表将是对象名按照字典序排序后该参数以后的所有对象。                                                                                |
| MaxKeys         | integer | 可选     | 列举多版本对象的最大数目，取值范围为1\~1000，当超出范围时，按照默认的1000进行处理。                                                                             |
| Delimiter       | string  | 可选     | 用于对对象名进行分组的字符。对于对象名中包含Delimiter的对象，其对象名（如果请求中指定了Prefix，则此处的对象名需要去掉Prefix）中从首字符至第一个Delimiter之间的字符串将作为一个分组并作为CommonPrefix返回。  |
| VersionIdMarker | string  | 可选     | 与KeyMarker配合使用，返回的对象列表将是对象名和版本号按照字典序排序后该参数以后的所有对象。 如果VersionIdMarker不是KeyMarker的一个版本号，则该参数无效。 |
   
#### 返回结果
| **字段名**  ||| **类型**            | **说明**                                              |
|:--|---|---|:---|:---|
| HttpStatusCode ||| integer           | HTTP状态码。                                            |
| Reason   ||| string            | HTTP文本描述。                                           |
| RequestId ||| string            | OBS服务端返回的请求ID。                                      |
| Location ||| string            | 桶的区域位置。                                             |
| Name     ||| string            | 桶名。                                                 |
| Delimiter ||| string            | 用于对对象名进行分组的字符，与请求中的该参数对应。                           |
| Prefix   ||| string            | 对象名的前缀，与请求中的该参数对应。                                  |
| IsTruncated ||| boolean           | 表明本次请求是否返回了全部结果，"true"表示没有返回全部结果；"false"表示已返回了全部结果。 |
| KeyMarker ||| string            | 列举多版本对象的起始位置，与请求中的该参数对应。                            |
| VersionIdMarker ||| string            | 表示列举多版本对象的起始位置（VersionId标识），与请求中的该参数对应。             |
| NextKeyMarker ||| string            | 下次列举多版本对象请求的起始位置。                                   |
| NextVersionIdMarker ||| string            | 下次列举多版本对象请求的起始位置（VersionId标识），与NextKeyMarker配合使用。   |
| MaxKeys  ||| integer           | 列举多版本对象的最大数目，与请求中的该参数对应。                            |
| Versions ||| indexed array     | 多版本对象列表。                                            |
| - | ETag  || string            | 对象的MD5值。                                            |
| - | Size  || integer           | 对象的字节数。                                             |
| - | Key   || string            | 对象名。                                                |
| - | VersionId || string            | 对象的版本号。                                             |
| - | IsLatest || boolean           | 标识对象是否是最新的版本，true代表是最新的版本。                          |
| - | LastModified || string            | 对象最近一次被修改的时间。                                       |
| - | Owner || associative array | 对象的拥有者。                                             |
| - | - | ID | string            | 对象所有者的DomainId。                                     |
| - | StorageClass || string            | 对象的存储类型                                             |
| DeleteMarkers ||| indexed array     | 删除标记列表。                                             |
| - | Owner || associative array | 对象的所有者。                                             |
| - | - | ID | string            | 对象所有者的DomainId。                                     |
| - | Key   || string            | 对象名。                                                |
| - | VersionId || string            | 对象的版本号。                                             |
| - | IsLatest || boolean           | 标识对象是否是最新的版本，true代表是最新的版本。                          |
| - | LastModified || string            | 对象最近一次被修改的时间。                                       |
| CommonPrefixes ||| indexed array     | 当请求中设置了Delimiter分组字符时，返回按Delimiter分组后的对象名称前缀列表。     |
| - | Prefix || string            | 按Delimiter分组后的对象名称前缀。                               |
   
#### 代码样例
```
try{
       $resp = $obsClient -> listVersions([
              'Bucket' => 'bucketname',
              'Prefix' => 'prefix',
              'MaxKeys' => 100
       ]);
       printf("RequestId:%s\n", $resp['RequestId']);
       printf("Versions:\n");
       foreach ($resp['Versions'] as $index => $version){
              printf("Versions[%d]\n", $index + 1);
              printf("ETag:%s\n", $version['ETag']);
              printf("Size:%s\n", $version['Size']);
              printf("StorageClass:%s\n", $version['StorageClass']);
              printf("Key:%s\n", $version['Key']);
              printf("VersionId:%s\n", $version['VersionId']);
              printf("LastModified:%s\n", $version['LastModified']);
              printf("Owner[ID]:%s\n", $version['Owner']['ID']);
       }
       
       printf("DeleteMarkers:\n");
       foreach ($resp['DeleteMarkers'] as $index => $deleteMarker){
              printf("DeleteMarkers[%d]\n", $index + 1);
              printf("Key:%s\n", $deleteMarker['Key']);
              printf("VersionId:%s\n", $deleteMarker['VersionId']);
              printf("IsLatest:%s\n", $deleteMarker['IsLatest']);
              printf("LastModified:%s\n", $deleteMarker['LastModified']);
              printf("Owner[ID]:%s\n", $deleteMarker['Owner']['ID']);
        }
}catch (Obs\Common\ObsException $obsException){
       printf("ExceptionCode:%s\n", $obsException->getExceptionCode());              
       printf("ExceptionMessage:%s\n", $obsException->getExceptionMessage());
}
```
