下载文件

MSS PHP SDK提供了丰富的文件下载接口,用户可以通过以下方式从MSS下载文件(object):

  • 下载文件到本地文件
  • 下载文件到内存
  • 分段下载
  • 条件下载

下载文件到本地文件

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

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

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

$result = $client->getObject(array(
    'Bucket' => $bucket,
    'Key' => $object,
    'SaveAs' => '/tmp/data.txt'));

echo $result['Body']->getUri() . "\n";

下载文件到内存

以下代码下载文件到内存:

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 = $client->getObject(array(
    'Bucket' => $bucket,
    'Key' => $object));

$content=$result['Body']
echo $content

范围下载

如果MSS文件较大,您只需要其中一部分数据,可以使用范围下载,下载指定范围的数据。如果指定的下载范围是0 - 100,则返回第0到第100个字节的数据,包括第100个,共101字节的数据,即[0, 100]。如果指定的范围无效,则下载整个文件。

以下代码可以下载文件[0, 100]的内容到内存:

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 = $client->getObject(array(
    'Bucket' => $bucket,
    'Key' => $object,
    'Range' => '0-100'));

$content=$result['Body']
echo $content

条件下载

下载文件时,可以指定一个或多个限定条件,满足限定条件时下载,不满足时报错,不下载文件。可以使用的限定条件如下:

参数 说明
If-Modified-Since 如果指定的时间早于实际修改时间,则正常传送。否则返回错误。
If-Unmodified-Since 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件;否则返回错误。
If-Match 如果传入期望的ETag和object的ETag匹配,则正常传输;否则返回错误。
If-None-Match 如果传入的ETag值和Object的ETag不匹配,则正常传输;否则返回错误。

以下代码示例如何进行条件下载:

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 = $client->getObject(array(
    'Bucket' => $bucket,
    'Key' => $object,
    ''IfModifiedSince' => 'Fri, 13 Nov 2015 14:47:53 GMT'));