本文介绍如何在开启版本控制状态下列举存储空间下(Bucket)的所有文件(Object)、指定个数的文件、指定前缀的文件等。
注意事项
本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS访问域名、数据中心、开放端口。
本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见新建OssClient。
要列举文件,您必须有
oss:ListObjectVersions
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
列举Bucket中所有Object的版本信息
以下代码用于列举examplebucket中包括删除标记(Delete Marker)在内的所有Object的版本信息。
<?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();
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try{
$option = array(
OssClient::OSS_KEY_MARKER => null,
OssClient::OSS_VERSION_ID_MARKER => null
);
$bool = true;
while ($bool){
$result = $ossClient->listObjectVersions($bucket,$option);
// 查看Object的版本信息。
foreach ($result->getObjectVersionList() as $key => $info){
printf("key name: {$info->getKey()}\n");
printf("versionid: {$info->getVersionId()}\n");
printf("Is latest: {$info->getIsLatest()}\n\n");
}
// 查看删除标记的版本信息。
foreach ($result->getDeleteMarkerList() as $key => $info){
printf("del_maker key name: {$info->getKey()}\n");
printf("del_maker versionid: {$info->getVersionId()}\n");
printf("del_maker Is latest: {$info->getIsLatest()}\n\n");
}
if($result->getIsTruncated() === 'true'){
$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
}else{
$bool = false;
}
}
} catch(OssException $e) {
printf($e->getMessage() . "\n");
return;
}
列举指定前缀Object的版本信息
以下代码用于列举examplebucket中以test为前缀Object的版本信息。
<?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();
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try{
$option = array(
OssClient::OSS_KEY_MARKER => null,
OssClient::OSS_VERSION_ID_MARKER => null,
// 指定列举以"test"为前缀Object的版本信息。
OssClient::OSS_PREFIX => "test"
);
$bool = true;
while ($bool){
$result = $ossClient->listObjectVersions($bucket,$option);
// 查看Object的版本信息。
foreach ($result->getObjectVersionList() as $key => $info){
printf("key name: {$info->getKey()}\n");
printf("versionid: {$info->getVersionId()}\n");
printf("Is latest: {$info->getIsLatest()}\n\n");
}
// 查看删除标记的版本信息。
foreach ($result->getDeleteMarkerList() as $key => $info){
printf("del_maker key name: {$info->getKey()}\n");
printf("del_maker versionid: {$info->getVersionId()}\n");
printf("del_maker Is latest: {$info->getIsLatest()}\n");
}
if($result->getIsTruncated() === 'true'){
$option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker();
$option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker();
}else{
$bool = false;
}
}
} catch(OssException $e) {
printf($e->getMessage() . "\n");
return;
}
列举指定个数的Object版本信息
以下代码用于列举examplebucket中指定个数的Object版本信息。
<?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();
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
try{
$option = array(
OssClient::OSS_KEY_MARKER => null,
OssClient::OSS_VERSION_ID_MARKER => null,
OssClient::OSS_MAX_KEYS => 200 // 指定最多列举200个Object版本信息。
);
$result = $ossClient->listObjectVersions($bucket,$option);
// 查看Object的版本信息。
foreach ($result->getObjectVersionList() as $key => $info){
printf("key name: ".$info->getKey().PHP_EOL);
printf("versionid: ".$info->getVersionId().PHP_EOL);
printf("Is latest: ".$info->getIsLatest().PHP_EOL.PHP_EOL);
}
// 查看删除标记的版本信息。
foreach ($result->getDeleteMarkerList() as $key => $info){
printf("del_maker key name: ".$info->getKey().PHP_EOL);
printf("del_maker versionid: ".$info->getVersionId().PHP_EOL);
printf("del_maker Is latest: ".$info->getIsLatest().PHP_EOL.PHP_EOL);
}
} catch(OssException $e) {
printf($e->getMessage() . "\n");
return;
}
文件夹功能
OSS没有文件夹的概念,所有元素都是以文件来存储。创建文件夹本质上来说是创建了一个大小为0并以正斜线(/)结尾的文件。这个文件可以被上传和下载,控制台会对以正斜线(/)结尾的文件以文件夹的方式展示。
通过delimiter和prefix两个参数可以模拟文件夹功能:
如果设置prefix为某个文件夹名称,则会列举以此prefix开头的文件,即该文件夹下所有的文件和子文件夹(目录)均显示为Object。
如果在设置了prefix的情况下,将delimiter设置为正斜线(/),则只列举该文件夹下的文件和子文件夹(目录),该文件夹下的子文件夹(目录)显示为CommonPrefixes,子文件夹下的文件和文件夹不显示。
列举根目录下Object的版本信息
以下代码用于列举examplebucket中根目录下Object的版本信息。
<?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(); // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 $endpoint = "yourEndpoint"; // 填写Bucket名称,例如examplebucket。 $bucket= "examplebucket"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ $option = array( OssClient::OSS_KEY_MARKER => null, OssClient::OSS_VERSION_ID_MARKER => null, OssClient::OSS_DELIMITER => "/", // 指定分隔符为正斜线(/)。 ); $bool = true; while ($bool){ $result = $ossClient->listObjectVersions($bucket,$option); // 查看Object的版本信息。 foreach ($result->getObjectVersionList() as $key => $info){ printf("key name: {$info->getKey()}\n"); printf("versionid: {$info->getVersionId()}\n"); printf("Is latest: {$info->getIsLatest()}\n\n"); } // 查看删除标记的版本信息。 foreach ($result->getDeleteMarkerList() as $key => $info){ printf("del_maker key name: {$info->getKey()}\n"); printf("del_maker versionid: {$info->getVersionId()}\n"); printf("del_maker Is latest: {$info->getIsLatest()}\n\n"); } if($result->getIsTruncated() === 'true'){ $option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker(); $option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker(); }else{ $bool = false; } } } catch(OssException $e) { printf($e->getMessage() . "\n"); return; }
列举指定目录下Object的版本信息
以下代码用于列举examplebucket中test目录下Object的版本信息。
<?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(); // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。 $endpoint = "yourEndpoint"; // 填写Bucket名称,例如examplebucket。 $bucket= "examplebucket"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ $option = array( OssClient::OSS_KEY_MARKER => null, OssClient::OSS_VERSION_ID_MARKER => null, OssClient::OSS_DELIMITER => "/", // 指定分隔符为正斜线(/)。 OssClient::OSS_PREFIX => "test/", // 指定列举test目录下Object的版本信息。 ); $bool = true; while ($bool){ $result = $ossClient->listObjectVersions($bucket,$option); // 查看Object的版本信息。 foreach ($result->getObjectVersionList() as $key => $info){ printf("key name: {$info->getKey()}\n"); printf("versionid: {$info->getVersionId()}\n"); printf("Is latest: {$info->getIsLatest()}\n\n"); } // 查看删除标记的版本信息。 foreach ($result->getDeleteMarkerList() as $key => $info){ printf("del_maker key name: {$info->getKey()}\n"); printf("del_maker versionid: {$info->getVersionId()}\n"); printf("del_maker Is latest: {$info->getIsLatest()}\n\n"); } if($result->getIsTruncated() === 'true'){ $option[OssClient::OSS_KEY_MARKER] = $result->getNextKeyMarker(); $option[OssClient::OSS_VERSION_ID_MARKER] = $result->getNextVersionIdMarker(); }else{ $bool = false; } } } catch(OssException $e) { printf($e->getMessage() . "\n"); return; }