管理文件

在MSS中,用户可以通过一系列的接口管理存储空间(Bucket)中的文件(Object),比如ListObjects,DeleteObject,CopyObject,DoesObjectExist等。

列出存储空间中的文件

以下代码列出指定bucket下的所有文件:

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$bucket = "<使用的bucketName,注意命名规范>";

$mssClient = Mss\S3\S3Client::factory([
        'endpoint' => $endpoint,
        'key'    => $accessKeyId,
        'secret' => $accessKeySecret,]);

$iterator = $mssClient->getIterator('ListObjects', array('Bucket' => $bucket));

foreach ($iterator as $object) {
    echo $object['Key'] . "\n";
}

判断文件是否存在

以下代码判断指定object是否存在于指定bucket中:

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$bucket = "<使用的bucketName,注意命名规范>";
$object = "<使用的Object名字,注意命名规范>";

$mssClient = Mss\S3\S3Client::factory([
        'endpoint' => $endpoint,
        'key'    => $accessKeyId,
        'secret' => $accessKeySecret,]);

$isExist = $mssClient->doesObjectExist($bucket, $object);

删除单个文件

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$bucket = "<使用的bucketName,注意命名规范>";
$object = "<使用的Object名字,注意命名规范>";

try {
        $result = $mssClient->deleteObject(array(
                'Bucket' => $bucket,
                'Key' => $object));
} catch (Mss\S3\Exception\NoSuchKeyException $eNoSuchKey) {
        echo "no such key, $eNoSuchKey\n";
} catch (Exception $e) {
        echo "other exception $e\n";
}

拷贝文件

以下代码完成了拷贝文件:

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$from_bucket = "<使用的bucketName,注意命名规范>";
$from_object = "<使用的Object名字,注意命名规范>";
$to_bucket = "<使用的bucketName,注意命名规范>";
$to_object = "<使用的Object名字,注意命名规范>";

$mssClient = Mss\S3\S3Client::factory([
        'endpoint' => $endpoint,
        'key'    => $accessKeyId,
        'secret' => $accessKeySecret,]);

$mssClient->copyObject(array(
        'Bucket' => $to_bucket,
        'Key' => $to_object,
        'CopySource' => $from_bucket . '/' . $from_object,
        'MetadataDirective' => 'COPY'));

修改文件元信息

文件元信息(Object Meta),是对用户上传到OSS的文件的属性描述,分为两种:HTTP标准属性(HTTP Headers)和User Meta(用户自定义元信息)。文件元信息可以在各种方式上传或者拷贝文件时进行设置。

HTTP标准属性,Cache-Control、Content-Disposition、Content-Encoding、Content-Language、Expires、Content-Length、Content-Type、Last-Modified等。

为了便于用户对Object进行更多描述。MSS中规定所有以x-amz-meta-为前缀的参数,则视为User Meta比如x-amz-meta-location。一个Object可以有多个类似的参数,但所有的User Meta总大小不能超过8k。这些User Meta信息会在下载文件/获取文件元数据时返回。 可以通过拷贝操作来实现修改已有文件元信息。如果拷贝操作的源文件地址和目标文件地址相同,都会直接替换源文件的文件元信息。

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$bucket = "<使用的bucketName,注意命名规范>";
$object = "<使用的Object名字,注意命名规范>";


$mssClient = Mss\S3\S3Client::factory([
        'endpoint' => $endpoint,
        'key'    => $accessKeyId,
        'secret' => $accessKeySecret,]);


$mssClient->copyObject(array(
        'Bucket' => $bucket,
        'Key' => $object,
        'CopySource' => $bucket . '/' . $object,
        'MetadataDirective' => 'COPY',
        'Content-Disposition' => 'attachment; filename="xxxxxx"'));

获取文件的文件元信息(Object Meta)

以下代码可以获取文件元信息:

require '/path/to/mss.phar';

$accessKeyId = "<从MSS获得的AccessKeyId>";
$accessKyeSecret = "<从MSS获得的AccessKeySecret>";
$endpoint = "<选定的MSS数据中心访问域名,例如http://mtmss.com>";
$bucket = "<使用的bucketName,注意命名规范>";
$object = "<使用的Object名字,注意命名规范>";


$mssClient = Mss\S3\S3Client::factory([
        'endpoint' => $endpoint,
        'key'    => $accessKeyId,
        'secret' => $accessKeySecret,]);

$result = $mssClient->headObject(array(
    'Bucket' => $bucket,
    'Key' = > $object));

echo $result['Metadata']