下载对象

您可以使用 getObject 接口下载对象,以下代码展示如何下载一个对象:

$bucket = '<your-bucket-name>';
$keyname = '<your-object-key>';
$file_Path = '<your-file-path>';
try {
    // 保存对象到指定路径
    $result = $s3Client->getObject(array(
        'Bucket' => $bucket,
        'Key' => $keyname,
        'SaveAs' => $file_Path,
    ));
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

下载文件时,可以指定一个或者多个限定条件,满足条件时才下载对象,不满足时则返回错误代码,不下载对象。可以使用的限定条件如下:

限定条件 作用
IfModifiedSince 如果指定的时间早于实际修改时间,则正常传送。否则返回304代码。
IfUnmodifiedSince 如果传入参数中的时间等于或者晚于文件实际修改时间,则正常传输文件;否则返回304代码。
IfMatch 如果传入的ETag和Object的 ETag匹配,则正常传输;否则返回412代码。
IfNoneMatch 如果传入的ETag值和Object的ETag不匹配,则正常传输;否则返回412代码。

以下示例代码展示如何指定限定条件下载对象:

$bucket = '<your-bucket-name>';
$keyname = '<your-object-key>';
$file_Path = '<your-file-path>';
try {
    $dateTime = new DateTime('<your-datetime>');
    echo $dateTime->format('c') . "\n";
    $result = $s3Client->getObject(array(
        'Bucket' => $bucket,
        'Key' => $keyname,
        'SaveAs' => $keyname,
        'IfModifiedSince' => $dateTime,      //指定晚于修改时间
        'IfMatch' => '<your-ETag>',          //指定匹配的ETag
    ));
    var_dump($result);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}