全部产品
Search
文档中心

Object Storage Service:Unduhan bersyarat (PHP SDK V1)

更新时间:Nov 30, 2025

Unduhan bersyarat memungkinkan Anda menentukan satu atau beberapa kondisi saat mengunduh objek dari Object Storage Service (OSS). Objek hanya akan diunduh ke memori lokal atau file lokal jika kondisi yang ditentukan terpenuhi. Jika tidak, sistem akan mengembalikan error dan proses unduhan tidak dimulai.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Informasi selengkapnya mengenai wilayah dan titik akhir yang didukung tersedia di Wilayah dan titik akhir.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat OssClient.

  • Untuk melakukan unduhan bersyarat, Anda harus memiliki izin oss:GetObject. Informasi selengkapnya tersedia di Lampirkan kebijakan kustom ke RAM user.

Kondisi

Tabel berikut mencantumkan kondisi yang didukung oleh OSS. Anda dapat menggunakan If-Modified-Since dan If-Unmodified-Since secara bersamaan, serta If-Match dan If-None-Match secara bersamaan.

Parameter

Deskripsi

Metode

If-Modified-Since

Jika objek dimodifikasi setelah waktu yang ditentukan, objek akan diunduh. Jika tidak, error 304 Not modified dikembalikan.

OssClient::OSS_IF_MODIFIED_SINCE

If-Unmodified-Since

Jika objek dimodifikasi pada atau sebelum waktu yang ditentukan, objek akan diunduh. Jika tidak, error 412 Precondition failed dikembalikan.

OssClient::OSS_IF_UNMODIFIED_SINCE

If-Match

Jika ETag objek OSS sesuai dengan ETag yang ditentukan, objek akan diunduh. Jika tidak, error 412 Precondition failed dikembalikan.

Catatan

Dapatkan ETag objek menggunakan metode $ossClient->getObjectMeta.

OssClient::OSS_IF_MATCH

If-None-Match

Jika ETag objek OSS tidak sesuai dengan ETag yang ditentukan, objek akan diunduh. Jika tidak, error 304 Not modified dikembalikan.

OssClient::OSS_IF_NONE_MATCH

Unduh objek ke memori lokal secara bersyarat

Kode berikut menunjukkan cara menentukan kondisi untuk mengunduh objek ke memori lokal:

<?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;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. 
$provider = new EnvironmentVariableCredentialsProvider();
// Contoh berikut menggunakan titik akhir wilayah China (Hangzhou). Ganti nilai ini dengan titik akhir yang sebenarnya.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket.
$bucket= "yourBucketName";
// Tentukan nama objek. Nama objek adalah path lengkap objek tanpa menyertakan nama bucket, misalnya exampledir/exampleobject.txt.
$object = "yourObjectName";

try{
    $options = array(
        OssClient::OSS_HEADERS => array(          
          // Unduh objek jika dimodifikasi setelah Fri, 9 Apr 2021 14:47:53 GMT.
          OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
          // Unduh objek jika dimodifikasi pada atau sebelum Fri, 13 Oct 2021 14:47:53 GMT.
          OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
          // Unduh objek jika ETag-nya tidak sesuai dengan ETag yang ditentukan.
          OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
          // Unduh objek jika ETag-nya sesuai dengan ETag yang ditentukan.
          OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',
        )

    );

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    // Unduh objek ke memori lokal.
    $content = $ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print ($content);
print(__FUNCTION__ . ": OK" . "\n");

Unduh objek ke file lokal secara bersyarat

Kode berikut menunjukkan cara menentukan kondisi untuk mengunduh objek ke file lokal:

<?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;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. 
$provider = new EnvironmentVariableCredentialsProvider();
// Contoh berikut menggunakan titik akhir wilayah China (Hangzhou). Ganti nilai ini dengan titik akhir yang sebenarnya.
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// Tentukan nama bucket.
$bucket= "yourBucketName";
// Tentukan nama objek. Nama objek adalah path lengkap objek tanpa menyertakan nama bucket, misalnya exampledir/exampleobject.txt.
$object = "yourObjectName";
// Tentukan path lengkap file lokal. Misalnya, D:\\localpath\\examplefile.txt.
$localfile = "yourLocalFile";

try{
    $options = array(
        OssClient::OSS_HEADERS => array(          
           // Unduh objek jika dimodifikasi setelah Fri, 9 Apr 2021 14:47:53 GMT.
          OssClient::OSS_IF_MODIFIED_SINCE => "Fri, 9 Apr 2021 14:47:53 GMT",
          // Unduh objek jika dimodifikasi pada atau sebelum Fri, 13 Oct 2021 14:47:53 GMT.
          OssClient::OSS_IF_UNMODIFIED_SINCE => "Fri, 13 Oct 2021 14:47:53 GMT",
          // Unduh objek jika ETag-nya tidak sesuai dengan ETag yang ditentukan.
          OssClient::OSS_IF_NONE_MATCH => '"5B3C1A2E0563E1B002CC607C****"',
          // Unduh objek jika ETag-nya sesuai dengan ETag yang ditentukan.
          OssClient::OSS_IF_MATCH => '"fba9dede5f27731c9771645a3986****"',          
          OssClient::OSS_FILE_DOWNLOAD => $localfile
        )

    );

    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    $ossClient->getObject($bucket, $object, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}