全部产品
Search
文档中心

Object Storage Service:Mengganti nama file (PHP SDK V2)

更新时间:Nov 09, 2025

Objek tidak dapat langsung diganti namanya di OSS. Untuk mengganti nama objek dalam bucket yang sama, Anda dapat menggunakan operasi CopyObject untuk menyalin objek sumber ke objek tujuan dengan nama baru.

Pertimbangan

  • Kode contoh dalam topik ini menggunakan titik akhir publik Wilayah Hangzhou, Tiongkok (cn-hangzhou) secara default. Jika Anda ingin mengakses OSS dari produk Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi lebih lanjut tentang wilayah dan titik akhir yang didukung oleh OSS, lihat Wilayah dan Titik Akhir OSS.

Kode contoh

Mengganti nama objek menggunakan metode salinan sederhana (CopyObject)

Anda dapat menggunakan metode salinan sederhana CopyObject untuk mengganti nama objek.

<?php

// Impor file autoloader untuk memastikan bahwa library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Tentukan deskripsi untuk argumen baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada. (Wajib)
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Titik akhir. (Opsional)
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket tujuan. (Wajib)
    "key" => ['help' => 'Nama objek', 'required' => True], // Nama objek tujuan. (Wajib)
    "src-bucket" => ['help' => 'Nama bucket sumber', 'required' => False], // Nama bucket sumber. (Opsional)
    "src-key" => ['help' => 'Nama objek sumber', 'required' => True], // Nama objek sumber. (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 argumen yang diperlukan telah disediakan.
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 wajib tidak ada, keluar dari program.
    }
}

// Ekstrak nilai dari argumen yang telah diparsing.
$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.

// 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); // Setel penyedia kredensial.
$cfg->setRegion($region); // Setel wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir diberikan, setel titik akhir.
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Buat objek CopyObjectRequest untuk menyalin objek.
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key,
            sourceKey: $srcKey,
            sourceBucket: $bucket);

if (!empty($options["src-bucket"])) {
    $request->sourceBucket = $options["src-bucket"]; // Jika nama bucket sumber diberikan, setel sourceBucket.
}
$request->sourceKey = $srcKey; // Setel nama objek sumber.

// Jalankan operasi penyalinan objek.
$result = $client->copyObject($request);

// Cetak hasil penyalinan.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan sukses.
    'request id:' . $result->requestId . PHP_EOL     // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
);

Mengganti nama objek menggunakan pengelola salinan (Copier)

Kode berikut menunjukkan cara menggunakan metode Copier.Copy dalam pengelola salinan untuk mengganti nama objek.

<?php

// Impor file autoloader untuk memastikan bahwa library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Tentukan deskripsi untuk argumen baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada. (Wajib)
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Titik akhir. (Opsional)
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket. (Wajib)
    "key" => ['help' => 'Nama objek', 'required' => True], // Nama objek tujuan. (Wajib)
    "src-key" => ['help' => 'Nama objek sumber', 'required' => True], // Nama objek sumber. (Wajib)
];

// Ubah deskripsi argumen menjadi format opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) pada setiap argumen untuk 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 disediakan.
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 wajib tidak ada, keluar dari program.
    }
}

// Ekstrak nilai dari argumen yang telah diparsing.
$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.

// 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); // Setel penyedia kredensial.
$cfg->setRegion($region); // Setel wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir diberikan, setel titik akhir.
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Buat instance Copier untuk menjalankan operasi penyalinan.
$copier = $client->newCopier();

$dstKey = $key; // Nama objek tujuan.
$copyRequest = new Oss\Models\CopyObjectRequest(
    bucket: $bucket,
    key: $dstKey,
    sourceBucket: $bucket,
    sourceKey: $srcKey);

$result = $copier->copy(
    request: $copyRequest,
);

printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan sukses.
    'request id:' . $result->requestId . PHP_EOL     // ID permintaan, yang digunakan untuk debug atau melacak permintaan.
);