Topik ini menjelaskan cara mengonfigurasi dan menanyakan metadata objek menggunakan OSS SDK untuk PHP.
Catatan penggunaan
Kode contoh dalam topik ini menggunakan ID Wilayah
cn-hangzhoudari Wilayah (Hangzhou) Tiongkok. Secara default, titik akhir publik digunakan untuk mengakses sumber daya di bucket. Jika Anda ingin mengakses sumber daya di bucket dengan layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir OSS, lihat Wilayah dan Titik Akhir.Untuk mengonfigurasi metadata objek, Anda memerlukan izin
oss:PutObject. Untuk menanyakan metadata objek, Anda memerlukan izinoss:GetObject. Untuk informasi lebih lanjut, lihat Melampirkan Kebijakan Kustom ke Pengguna RAM.
Mengonfigurasi metadata objek selama unggah objek
Mengonfigurasi metadata objek selama unggah objek
Berikut adalah kode contoh yang mengunggah objek menggunakan PutObject dan mengonfigurasi header metadata objek seperti waktu kedaluwarsa, daftar kontrol akses (ACL), dan beberapa metadata pengguna. Anda dapat mengonfigurasi metadata objek dengan cara yang sama jika menggunakan operasi API unggah lainnya.
<?php
// Sertakan file autoload agar dependensi yang diperlukan dapat dimuat.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek.
"file" => ['help' => 'Jalur lokal ke file yang ingin Anda unggah.', 'required' => True], // (Diperlukan) Tentukan jalur file lokal.
];
// Ubah deskripsi parameter menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Analisis parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah disediakan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
$file = $options["file"]; // Jalur file lokal.
// Dapatkan kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika ada yang diberikan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Periksa apakah file ada.
if (!file_exists($file)) {
echo "Error: File yang ditentukan tidak ada." . PHP_EOL; // Jika file tidak ada, cetak pesan kesalahan dan keluar.
exit(1);
}
// Buka file lokal dan siapkan untuk unggahan.
// Buka file lokal dalam mode baca-saja dan ubah konten file menjadi aliran menggunakan Utils::streamFor.
$body = Oss\Utils::streamFor(fopen($file, 'r'));
// Buat objek PutObjectRequest untuk mengunggah objek.
$request = new Oss\Models\PutObjectRequest(
bucket: $bucket,
key: $key,
metadata: [ 'Author' => 'alibaba oss sdk',
'Date' => '2024-07-01']); // Konfigurasikan metadata objek.
$request->body = $body; // Tetapkan badan permintaan ke aliran file.
// Lakukan operasi unggah.
$result = $client->putObject($request);
// Tampilkan hasil operasi unggah objek.
// Tampilkan kode status HTTP, ID permintaan, dan ETag, untuk memeriksa apakah permintaan berhasil.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan, yang digunakan untuk debug atau jejak permintaan.
'etag:' . $result->etag . PHP_EOL // ETag objek, yang digunakan untuk mengidentifikasi objek secara unik.
);
Menanyakan metadata objek
Tanyakan semua metadata objek menggunakan metode HeadObject
Berikut adalah kode contoh yang menanyakan semua metadata objek menggunakan metode HeadObject:
<?php
// Sertakan file autoload agar dependensi yang diperlukan dapat dimuat.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek.
];
// Ubah deskripsi parameter menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Analisis parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah disediakan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Dapatkan kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika ada yang diberikan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat objek HeadObjectRequest untuk mendapatkan metadata objek.
$request = new Oss\Models\HeadObjectRequest($bucket, $key);
// Tanyakan metadata objek.
$result = $client->headObject($request);
// Cetak hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan, yang digunakan untuk debug atau jejak permintaan.
'hasil:' . var_export($result, true) . PHP_EOL // Metadata yang dikembalikan.
);
Gunakan metode GetObjectMeta untuk menanyakan sebagian metadata objek
Anda dapat menggunakan metode GetObjectMeta untuk menanyakan hanya sebagian metadata objek, termasuk panjang konten yang dikembalikan (ContentLength), tag entitas (ETag), waktu modifikasi terakhir (LastModified), waktu akses terakhir (LastAccessTime), ID versi (VersionId), dan hash CRC-64 (HashCRC64).
Berikut adalah kode contoh yang menanyakan sebagian metadata objek menggunakan metode GetObjectMeta:
<?php
// Sertakan file autoload agar dependensi yang diperlukan dapat dimuat.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek.
];
// Ubah deskripsi parameter menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Analisis parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah disediakan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Dapatkan kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika ada yang diberikan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat objek GetObjectMetaRequest untuk menanyakan metadata objek.
$request = new Oss\Models\GetObjectMetaRequest($bucket, $key);
// Tanyakan metadata objek.
$result = $client->getObjectMeta($request);
// Cetak hasilnya.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $result->requestId . PHP_EOL . // ID permintaan, yang digunakan untuk debug atau jejak permintaan.
'hasil:' . var_export($result, true) . PHP_EOL // Metadata yang dikembalikan.
);
Memodifikasi metadata objek yang sudah ada
Gunakan metode CopyObject untuk memodifikasi metadata objek
Berikut adalah kode contoh yang memodifikasi metadata objek menggunakan metode CopyObject:
<?php
// Sertakan file autoload agar dependensi yang diperlukan dapat dimuat.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket tujuan.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek tujuan.
"src-bucket" => ['help' => 'Nama bucket sumber', 'required' => False], // (Opsional) Tentukan nama bucket sumber.
"src-key" => ['help' => 'Nama objek sumber', 'required' => True], // (Diperlukan) Tentukan nama objek sumber.
];
// Ubah deskripsi parameter menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Analisis parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah disediakan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket tujuan.
$key = $options["key"]; // Nama objek tujuan.
$srcKey = $options["src-key"]; // Nama objek sumber.
// Dapatkan kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika ada yang diberikan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat objek CopyObjectRequest untuk menyalin objek sumber.
$request = new Oss\Models\CopyObjectRequest(
bucket: $bucket,
key: $key,
metadata: [ 'x-oss-meta-tag1' => 'value1',
'x-oss-meta-tag2' => 'value2'],
metadataDirective: 'Replace');
if (!empty($options["src-bucket"])) {
$request->sourceBucket = $options["src-bucket"]; // Jika nama bucket sumber diberikan, tentukan parameter sourceBucket.
}
$request->sourceKey = $srcKey; // Tentukan nama objek sumber.
// Lakukan operasi penyalinan objek.
$result = $client->copyObject($request);
// Tampilkan hasil penyalinan objek.
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
'ID permintaan:' . $result->requestId . PHP_EOL // ID permintaan, yang digunakan untuk debug atau jejak permintaan.
);
Gunakan Copier.Copy untuk memodifikasi metadata objek
Anda dapat menggunakan Copier.Copy untuk menyalin objek sumber dan mengonfigurasi metadata untuk objek tujuan. Sebagai contoh, Anda dapat menimpa semua metadata asli yang ada dengan metadata baru, menghapus metadata asli, dan memperbarui hanya header metadata yang ditentukan. Anda juga dapat menentukan apakah akan menghapus objek sumber setelah operasi penyalinan selesai.
<?php
// Sertakan file autoload agar dependensi yang diperlukan dapat dimuat.
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
// Tentukan dan jelaskan parameter baris perintah.
$optsdesc = [
"region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Diperlukan) Tentukan wilayah tempat bucket berada.
"endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir untuk mengakses OSS.
"bucket" => ['help' => 'Nama bucket', 'required' => True], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => 'Nama objek', 'required' => True], // (Diperlukan) Tentukan nama objek tujuan.
"src-key" => ['help' => 'Nama objek sumber', 'required' => True], // (Diperlukan) Tentukan nama objek sumber.
];
// Ubah deskripsi parameter menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Analisis parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah disediakan.
foreach ($optsdesc as $key => $value) {
if ($value['required'] === True && empty($options[$key])) {
$help = $value['help']; // Dapatkan informasi bantuan untuk parameter.
echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
exit(1); // Keluar dari program jika parameter yang diperlukan tidak ada.
}
}
// Tetapkan nilai yang diurai dari parameter baris perintah ke variabel yang sesuai.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek tujuan.
$srcKey = $options["src-key"]; // Nama objek sumber.
// Dapatkan kredensial akses dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk mengambil ID AccessKey dan Rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
// Gunakan konfigurasi default dari SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]); // Tentukan titik akhir jika ada yang diberikan.
}
// Buat instance klien OSS.
$client = new Oss\Client($cfg);
// Buat instance Copier.
$copier = $client->newCopier();
$dstKey = "multipart-copy-replace-metadata-and-tagging-$key"; // Tentukan nama objek tujuan.
$copyRequest = new Oss\Models\CopyObjectRequest(
bucket: $bucket,
key: $dstKey,
sourceBucket: $bucket,
sourceKey: $srcKey
);
$copyRequest->metadataDirective = 'REPLACE'; // Ganti metadata objek.
$copyRequest->metadata = ['test1' => 'val1', 'test2' => 'value2']; // Tentukan metadata pengguna.
$result = $copier->copy(
request: $copyRequest,
);
printf(
'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
'ID permintaan:' . $result->requestId . PHP_EOL // ID permintaan.
);