全部产品
Search
文档中心

Object Storage Service:Mengganti nama objek untuk memenuhi konvensi penamaan

更新时间:Nov 09, 2025

Saat memigrasikan atau mengatur ulang data di Object Storage Service (OSS), Anda dapat mengganti nama objek untuk memastikan konsistensi penamaan dan akurasi struktural. Jika fitur namespace hierarkis diaktifkan untuk sebuah bucket, Anda dapat langsung mengganti nama objek di dalam bucket tersebut.

Skenario

  • Menerapkan konvensi penamaan: Saat menerapkan konvensi penamaan objek baru, Anda dapat mengganti nama objek yang ada untuk meningkatkan efisiensi dan konsistensi manajemen data.

  • Migrasi dan pengaturan ulang data: Saat menyesuaikan bagan organisasi, memigrasikan sistem, atau meningkatkan aplikasi, Anda mungkin perlu mengganti nama dan mengatur ulang data di OSS.

  • Mengoptimalkan tata letak penyimpanan: Untuk meningkatkan kinerja pengambilan data dan struktur organisasi, Anda mungkin perlu mengganti nama objek untuk mengoptimalkan tata letak penyimpanan dan struktur direktori virtual.

Catatan Penggunaan

  • Jika fitur namespace hierarkis diaktifkan untuk sebuah bucket, Anda dapat memanggil operasi RenameObject untuk langsung mengganti nama objek.

    Untuk informasi lebih lanjut tentang namespace hierarkis, lihat Gunakan Namespace Hierarkis.

  • Jika fitur namespace hierarkis tidak diaktifkan untuk sebuah bucket, Anda tidak dapat langsung mengganti nama objek. Untuk mengganti nama objek di dalam bucket, Anda harus memanggil operasi CopyObject untuk menyalin objek sumber ke objek tujuan, lalu memanggil operasi DeleteObject untuk menghapus objek sumber.

Prosedur

Gunakan Konsol OSS

Penting

Di Konsol OSS, Anda dapat mengganti nama objek berukuran apa pun, tetapi hanya dapat memindahkan objek yang berukuran 1 GB atau lebih kecil.

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi di sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.

  3. Ganti nama objek.

    • Jika fitur namespace hierarkis tidak diaktifkan untuk bucket:

      Di panel navigasi di sebelah kiri, pilih Object Management > Objects. Arahkan pointer mouse ke objek target, lalu klik ikon edit untuk mengganti nama objek. Pastikan nama objek mencakup ekstensi file saat mengganti nama.

    • Jika fitur namespace hierarkis diaktifkan untuk bucket:

      Di panel navigasi di sebelah kiri, pilih Object Management > Objects. Lalu, ganti nama atau pindahkan objek.

      Skenario

      Operasi

      Ganti nama objek

      Arahkan pointer mouse ke objek target, lalu klik ikon edit untuk mengganti nama objek. Saat mengganti nama objek, pastikan nama objek mencakup ekstensi file.

      Pindahkan objek

      Di daftar objek, temukan objek target dan pilih More > Move Object di kolom Actions. Di panel Move Object, tentukan direktori tujuan berdasarkan skenario berikut:

      • Untuk memindahkan objek ke direktori root bucket saat ini, biarkan direktori tujuan kosong.

      • Untuk memindahkan objek ke direktori tertentu di bucket saat ini, masukkan direktori tujuan. Misalnya, untuk memindahkan objek ke subdirektori subdir di direktori induk destdir, masukkan destdir/subdir sebagai direktori tujuan.

Gunakan Alibaba Cloud SDK

Berikut adalah contoh kode yang menunjukkan cara mengganti nama srcobject.txt di bucket examplebucket menjadi destobject.txt:

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.RenameObjectRequest;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Kami sangat menyarankan agar Anda tidak menyimpan kredensial akses Anda di kode proyek Anda. Jika tidak, kredensial akses Anda mungkin bocor, yang menimbulkan risiko keamanan bagi semua sumber daya Anda. Contoh ini menunjukkan cara mendapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh ini, konfigurasikan variabel lingkungan.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket.
        String bucketName = "examplebucket";
        // Tentukan jalur lengkap objek sumber. Jalur lengkap tidak boleh mencakup nama bucket.
        String sourceObject = "srcobject.txt";
        // Tentukan jalur lengkap objek tujuan. Jalur lengkap tidak boleh mencakup nama bucket.
        String destinationObject = "destobject.txt";

        // Buat instance OSSClient.
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            // Jika fitur namespace hierarkis diaktifkan untuk bucket, gunakan kode berikut untuk mengganti nama objek.
            // Ganti nama jalur absolut objek sumber di bucket menjadi jalur absolut objek tujuan.
            RenameObjectRequest renameObjectRequest = new RenameObjectRequest(bucketName, sourceObject, destinationObject);
            ossClient.renameObject(renameObjectRequest);

            // Jika fitur namespace hierarkis tidak diaktifkan untuk bucket, gunakan kode berikut untuk mengganti nama objek.
            // Salin objek srcobject.txt di bucket examplebucket ke objek destobject.txt di bucket yang sama.
            // ossClient.copyObject(bucketName, sourceObject, bucketName, destinationObject);

            // Hapus objek srcobject.txt.
            // ossClient.deleteObject(bucketName, sourceObject);
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Tangkap ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
const OSS = require('ali-oss');
const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou. 
  region: 'oss-cn-hangzhou',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket. 
  bucket: 'examplebucket',
})

async function renameObject() {
  try {
    // Salin objek srcobject.txt ke objek destobject.txt di bucket yang sama. 
    const r = await client.copy('destobject.txt', 'srcobject.txt');
    console.log ('Disalin', r);
    // Hapus objek srcobject.txt. 
    const deleteResult = await client.delete('srcobject.txt');
    console.log(deleteResult);
  } catch (e) {
    console.log(e);
  }
}

renameObject();
// Tentukan nama bucket. 
String bucketName = "examplebucket";
// Tentukan jalur lengkap objek sumber. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: srcobject.txt. 
String sourceObjectKey = "srcobject.txt";
// Tentukan jalur lengkap objek tujuan. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: destobject.txt. 
String objectKey = "destobject.txt";
try {
    CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName, sourceObjectKey, bucketName, objectKey);
    oss.copyObject(copyObjectRequest);
    // Hapus objek srcobject.txt. 
    DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, sourceObjectKey);
    oss.deleteObject(deleteObjectRequest);
} catch (ClientException e) {
    // Tangani pengecualian sisi klien, seperti kesalahan jaringan. 
    e.printStackTrace();
} catch (ServiceException e) {
    // Tangani pengecualian sisi server. 
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}
// Tentukan nama bucket. 
NSString *bucketName = @"examplebucket";
// Tentukan jalur lengkap objek sumber. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: srcobject.txt. 
NSString *sourceObjectKey = @"sourceObjectKey";
// Tentukan jalur lengkap objek tujuan. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: destobject.txt. 
NSString *objectKey = @"destobject.txt";
[[[OSSTask taskWithResult:nil] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
    // Salin objek srcobject.txt ke objek destobject.txt di bucket yang sama. 
    OSSCopyObjectRequest *copyRequest = [OSSCopyObjectRequest new];
    copyRequest.bucketName = bucketName;
    copyRequest.sourceBucketName = bucketName;
    copyRequest.sourceObjectKey = sourceObjectKey;
    copyRequest.objectKey = objectKey;
    OSSTask *copyTask = [client copyObject:copyRequest];
    [copyTask waitUntilFinished];
    if (copyTask.error) {
        return copyTask;
    }
    // Hapus objek srcobject.txt. 
    OSSDeleteObjectRequest *deleteObject = [OSSDeleteObjectRequest new];
    deleteObject.bucketName = bucketName;
    deleteObject.objectKey = sourceObjectKey;
    OSSTask *deleteTask = [client deleteObject:deleteObject];
    [deleteTask waitUntilFinished];
    if (deleteTask.error) {
        return deleteTask;
    }
    return nil;
}] continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
    if (task.error) {
        NSLog(@"gagal mengganti nama! kesalahan: %@", task.error);
    } else {
        NSLog(@"berhasil mengganti nama!");
    }
    return nil;
}];
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="contoh menyalin objek")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Ini adalah parameter wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket tujuan. Ini adalah parameter wajib.
parser.add_argument('--bucket', help='Nama bucket tujuan.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. Ini adalah parameter opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan nama objek tujuan. Ini adalah parameter wajib.
parser.add_argument('--key', help='Nama objek tujuan.', required=True)
# Tambahkan argumen baris perintah --source_key, yang menentukan nama objek sumber. Ini adalah parameter wajib.
parser.add_argument('--source_key', help='Nama objek sumber.', required=True)
# Tambahkan argumen baris perintah --source_bucket, yang menentukan nama bucket sumber. Ini adalah parameter wajib.
parser.add_argument('--source_bucket', help='Nama bucket sumber.', required=True)

def main():
    # Parse argumen baris perintah.
    args = parser.parse_args()

    # Muat kredensial dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Muat konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Atur wilayah dalam konfigurasi.
    cfg.region = args.region

    # Jika titik akhir disediakan, atur titik akhir dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Buat klien OSS dengan konfigurasi yang ditentukan.
    client = oss.Client(cfg)

    # Kirim permintaan untuk menyalin objek.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # Tentukan nama bucket tujuan.
        key=args.key,  # Tentukan kunci objek tujuan.
        source_key=args.source_key,  # Tentukan kunci objek sumber.
        source_bucket=args.source_bucket,  # Tentukan nama bucket sumber.
    ))
    
    # Hapus objek asli.
    client.delete_object(oss.DeleteObjectRequest(
        bucket=args.source_bucket,
        key=args.source_key
    ))

    # Cetak hasil operasi salin.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' ID versi: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi sumber: {result.source_version_id},'
          f' enkripsi sisi server: {result.server_side_encryption},'
          f' enkripsi data sisi server: {result.server_side_data_encryption},'
          f' terakhir dimodifikasi: {result.last_modified},'
          f' etag: {result.etag},'
    )

# Panggil fungsi utama saat skrip dijalankan langsung.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Fungsi utama dipanggil saat file dijalankan langsung.
<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan 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)
];

// Konversi deskripsi argumen ke 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));

// Parse argumen baris perintah.
$options = getopt("", $longopts);

// Verifikasi bahwa argumen yang diperlukan 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 yang diperlukan hilang, keluar dari program.
    }
}

// Ekstrak nilai dari argumen yang diurai.
$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 SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika titik akhir disediakan, atur 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 disediakan, atur sourceBucket.
}
$request->sourceKey = $srcKey; // Atur nama objek sumber.

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

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

Untuk kode contoh tentang cara mengganti nama objek menggunakan SDK lainnya, lihat Ikhtisar SDK.

Gunakan ossbrowser

ossbrowser mendukung operasi tingkat bucket yang mirip dengan yang didukung di Konsol OSS. Ikuti petunjuk di UI ossbrowser untuk mengganti nama objek. Untuk informasi lebih lanjut tentang cara menggunakan ossbrowser, lihat Operasi Umum.

Gunakan ossutil

Sebagai contoh, untuk mengganti nama examplefile.txt di bucket examplebucket1 menjadi example.txt, jalankan perintah berikut:

ossutil cp oss://examplebucket1/examplefile.txt oss://examplebucket1/example.txt 
ossutil rm oss://examplebucket1/examplefile.txt

Untuk informasi lebih lanjut tentang cara menggunakan ossutil untuk mengganti nama objek, lihat cp (Menyalin file) dan rm (Menghapus objek atau bagian).

Gunakan REST API

Jika program Anda memiliki persyaratan yang sangat disesuaikan, Anda dapat mengirim permintaan REST API. Jika Anda mengirim permintaan REST API, Anda harus secara manual menulis kode untuk menghitung tanda tangan. Untuk informasi lebih lanjut, lihat RenameObject.

Referensi

  • Saat mengunduh objek, kami sarankan Anda menggunakan URL yang ditandatangani atau metadata objek untuk mengganti nama objek. Ini mencegah biaya tambahan dan kesalahan dalam aplikasi yang bergantung pada nama objek asli. Untuk informasi lebih lanjut, lihat Tentukan nama untuk objek yang diunduh.

  • Ganti nama direktori.