Topik ini menjelaskan cara menggunakan metode unduhan rentang untuk secara efisien mengambil bagian tertentu dari sebuah objek.
Prasyarat
Kode contoh dalam topik ini menggunakan titik akhir publik untuk Wilayah China (Hangzhou) (
cn-hangzhou) sebagai contoh. Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang pemetaan antara wilayah yang didukung oleh OSS dan titik akhir, lihat Wilayah dan Titik Akhir OSS.Untuk menggunakan unduhan rentang, Anda harus memiliki izin
oss:GetObject. Untuk informasi lebih lanjut, lihat Memberikan Kebijakan Akses Kustom kepada Pengguna RAM.
Misalkan Anda memiliki objek berukuran 1.000 byte. Rentang unduhan yang valid adalah 0 hingga 999. Jika Anda menentukan rentang yang tidak valid, header Range tidak akan berlaku. Kode status 200 OK dikembalikan, dan seluruh objek ditransfer. Berikut adalah contoh permintaan yang tidak valid dan tanggapannya:
Jika Anda menentukan `Range: bytes=500-2000`, akhir rentang tidak valid. Seluruh objek dikembalikan, dan kode status HTTP adalah 200.
Jika Anda menentukan `Range: bytes=1000-2000`, awal rentang tidak valid. Seluruh objek dikembalikan, dan kode status HTTP adalah 200.
Anda dapat menambahkan header permintaan x-oss-range-behavior:standard untuk mengubah perilaku unduhan OSS ketika rentang yang tidak valid ditentukan. Misalkan Anda memiliki objek berukuran 1.000 byte:
Jika Anda menentukan `Range: bytes=500-2000`, akhir rentang tidak valid. Konten dalam rentang 500 hingga 999 byte dikembalikan, dan kode status HTTP adalah 206.
Jika Anda menentukan `Range: bytes=1000-2000`, awal rentang tidak valid. Kode status HTTP 416 dikembalikan, dan kode kesalahan adalah InvalidRange.
Kode contoh
Berikut adalah kode contoh yang menunjukkan cara mengunduh data dari rentang tertentu objek dengan menambahkan header permintaan RangeBehavior:standard.
<?php
// Impor file autoloader untuk memastikan bahwa pustaka dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan deskripsi argumen baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada. Parameter ini wajib.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Titik akhir. Parameter ini opsional.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket. Parameter ini wajib.
"key" => ['help' => 'Nama objek', 'required' => True], // Nama objek. Parameter ini wajib.
];
// Ubah deskripsi argumen menjadi format opsi panjang yang diperlukan oleh getopt.
// Tanda titik dua (:) setelah setiap argumen menunjukkan bahwa argumen tersebut memerlukan nilai.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Parsing argumen baris perintah.
$options = getopt("", $longopts);
// Verifikasi bahwa semua argumen yang diperlukan telah ditentukan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk argumen.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Jika argumen yang diperlukan tidak ada, keluar dari program.
}
}
// Ekstrak nilai dari argumen yang telah diuraikan.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Muat kredensial dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca Access Key ID dan Access Key Secret dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tetapkan penyedia kredensial.
$cfg->setRegion($region); // Tetapkan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Jika titik akhir disediakan, tetapkan titik akhir.
}
// Buat instans klien OSS.
$client = new Oss\Client($cfg);
// Tentukan perilaku unduhan standar. Dalam contoh ini, nilainya diatur ke 'standard'.
$rangeBehavior = 'standard';
// Tentukan header permintaan Range untuk mengambil sebagian dari objek.
$rangeHeader = 'bytes=0-10';
// Buat objek GetObjectRequest untuk mengambil konten objek yang ditentukan.
$request = new Oss\Models\GetObjectRequest(
bucket: $bucket,
key: $key,
rangeBehavior: $rangeBehavior,
rangeHeader: $rangeHeader);
// Jalankan operasi GetObject.
$result = $client->getObject($request);
// Cetak hasilnya.
// Keluarkan kode status HTTP, ID permintaan, dan konten objek.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Contohnya, 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan, yang digunakan untuk debugging atau pelacakan permintaan.
'konten objek:' . $result->body->getContents() . PHP_EOL // Konten objek.
);