All Products
Search
Document Center

Object Storage Service:Mengelola objek yang di-versioning

Last Updated:Jul 29, 2026

Saat Anda mengaktifkan versioning untuk bucket, objek yang sudah ada mempertahankan konten dan ACL-nya. Versioning mencegah penimpaan dan penghapusan tidak disengaja serta memungkinkan Anda melakukan kueri dan memulihkan versi historis objek.

Catatan penggunaan

Saat Anda mengunggah, menampilkan daftar, mengunduh, menghapus, atau memulihkan objek di bucket yang telah diaktifkan versioning, aturan lifecycle yang mentransisikan objek ke kelas penyimpanan berbeda tidak membuat versi baru. Untuk informasi selengkapnya, lihat Versioning.

Unggah objek

Saat Anda mengunggah objek ke bucket yang telah diaktifkan versioning, OSS secara otomatis membuat versi baru. Jika objek dengan nama yang sama sudah ada, objek yang ada dipertahankan sebagai versi historis dan objek yang baru diunggah menjadi versi saat ini.

Gunakan Konsol OSS

  1. Masuk ke OSS console.

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

  3. Di panel navigasi sebelah kiri, pilih Object Management > Objects.

  4. Di halaman Objects, klik Upload Object.

  5. Di panel Upload Object, konfigurasikan parameter berikut.

    1. Konfigurasikan opsi dasar.

      Parameter

      Deskripsi

      Upload To

      Tentukan path penyimpanan untuk objek.

      • Current Directory: Unggah objek ke direktori saat ini.

      • Specified Directory: Unggah objek ke direktori tertentu. Anda harus memasukkan nama direktori. Jika direktori tidak ada, OSS secara otomatis membuat direktori tersebut dan mengunggah objek ke dalamnya.

        Nama direktori harus memenuhi persyaratan berikut:

        • Nama harus terdiri dari 1 hingga 254 karakter dan harus dikodekan dalam UTF-8.

        • Nama tidak boleh diawali dengan garis miring (/) atau backslash (\).

        • Nama tidak boleh mengandung dua garis miring (/) berturut-turut.

        • Nama tidak boleh berupa dua titik berturut-turut (..).

      Object ACL

      Tetapkan daftar kontrol akses (ACL) untuk objek.

      • Inherited from Bucket: Objek mewarisi ACL bucket.

      • Private (Direkomendasikan): Hanya pemilik objek yang memiliki izin baca dan tulis pada objek tersebut. Pengguna lain tidak dapat mengakses objek.

      • Public Read: Pemilik objek memiliki izin baca dan tulis pada objek tersebut. Pengguna lain, termasuk pengguna anonim, hanya memiliki izin baca pada objek. Hal ini dapat menyebabkan kebocoran data dan biaya tak terduga yang tinggi. Harap berhati-hati.

      • Public Read/Write: Semua pengguna, termasuk pengguna anonim, dapat membaca dan menulis objek. Pengaturan ini menimbulkan risiko keamanan signifikan karena pengguna jahat dapat menulis konten tidak sah ke objek Anda. Hindari memberikan izin baca/tulis publik kecuali benar-benar diperlukan.

      Object ACL.

      Files to Upload

      Pilih file atau folder yang ingin Anda unggah.

      Klik Select Files atau Select Folders untuk memilih file atau folder lokal. Anda juga dapat menyeret file atau folder ke area Files to Upload.

      Jika folder yang dipilih berisi file yang tidak ingin Anda unggah, temukan file tersebut dalam daftar dan klik Remove di kolom Actions.

      Penting
      • Jika Anda mengunggah objek ke bucket yang versioning-nya dinonaktifkan dan objek tersebut memiliki nama yang sama dengan objek yang sudah ada, objek yang ada akan ditimpa.

      • Jika Anda mengunggah objek ke bucket yang versioning-nya diaktifkan dan objek tersebut memiliki nama yang sama dengan objek yang sudah ada, objek baru menjadi versi saat ini dan objek yang ada menjadi versi sebelumnya.

    2. Opsional: Klik ikon image.png di sebelah kanan Advanced Settings untuk mengonfigurasi opsi lanjutan seperti Storage Class dan Server-side Encryption.

      Parameter

      Deskripsi

      Storage Class

      Tetapkan kelas penyimpanan objek. Nilai yang valid:

      • Inherited from Bucket (Default): Objek mewarisi kelas penyimpanan bucket.

      • Standard: Menyediakan penyimpanan objek yang andal, sangat tersedia, dan berkinerja tinggi untuk data yang sering diakses. Kelas penyimpanan ini cocok untuk berbagai skenario, seperti aplikasi gambar sosial dan berbagi, aplikasi audio dan video, situs web besar, serta analitik data besar. Kelas penyimpanan Standard mendukung penyimpanan redundan zona (ZRS) dan penyimpanan redundan lokal (LRS).

      • IA: Menyediakan layanan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan lebih rendah. Kelas penyimpanan ini memiliki ukuran tagihan minimum 64 KB dan periode penyimpanan minimum 30 hari. Data dapat diakses secara real time, tetapi dikenakan biaya pengambilan data. Kelas penyimpanan ini cocok untuk skenario dengan frekuensi akses rendah, misalnya rata-rata sekali atau dua kali sebulan. Kelas penyimpanan IA mendukung penyimpanan redundan zona dan penyimpanan redundan lokal.

      • Archive: Menyediakan layanan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan sangat rendah. Kelas penyimpanan ini memiliki ukuran tagihan minimum 64 KB dan periode penyimpanan minimum 60 hari. Anda dapat mengakses objek Archive dengan memulihkannya terlebih dahulu (membutuhkan waktu sekitar satu menit) atau mengaksesnya secara langsung. Biaya dikenakan baik untuk pemulihan maupun pembacaan langsung. Kelas penyimpanan ini cocok untuk skenario arsip data jangka panjang, seperti data arsip, gambar medis, materi ilmiah, dan rekaman video. Kelas penyimpanan Archive mendukung penyimpanan redundan zona dan penyimpanan redundan lokal.

      • Cold Archive: Menyediakan layanan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan lebih rendah daripada Archive. Kelas penyimpanan ini memiliki ukuran tagihan minimum 64 KB dan periode penyimpanan minimum 180 hari. Objek Cold Archive harus dipulihkan sebelum Anda dapat mengaksesnya. Waktu pemulihan bergantung pada ukuran objek dan mode pemulihan. Biaya pengambilan data dan biaya permintaan dikenakan untuk pemulihan. Kelas penyimpanan ini cocok untuk menyimpan data dingin dalam jangka waktu lama, seperti data yang memerlukan retensi jangka panjang untuk kepatuhan regulasi, data mentah yang terakumulasi di bidang data besar dan AI, aset media jangka panjang di industri film dan televisi, serta video arsip di industri pendidikan daring. Kelas penyimpanan Cold Archive hanya mendukung penyimpanan redundan lokal.

      • Deep Cold Archive: Menyediakan layanan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan lebih rendah daripada Cold Archive. Kelas penyimpanan ini memiliki ukuran tagihan minimum 64 KB dan periode penyimpanan minimum 180 hari. Objek Deep Cold Archive harus dipulihkan sebelum Anda dapat mengaksesnya. Waktu pemulihan bergantung pada ukuran objek dan mode pemulihan. Biaya pengambilan data dan biaya permintaan dikenakan untuk pemulihan. Kelas penyimpanan ini cocok untuk menyimpan data sangat dingin dalam jangka waktu lama, seperti data mentah yang terakumulasi di bidang data besar dan AI, aset media jangka panjang, arsip regulasi dan kepatuhan, serta pengganti pita. Kelas penyimpanan Deep Cold Archive hanya mendukung penyimpanan redundan lokal.

      Storage classes.

      Encryption Method

      Tetapkan metode enkripsi sisi server untuk objek. Nilai yang valid:

      • Inherited from Bucket (Default): Objek mewarisi metode enkripsi sisi server bucket.

      • OSS-Managed: OSS mengenkripsi setiap objek dengan kunci unik yang dikelola OSS. Untuk perlindungan tambahan, kunci-kunci ini sendiri dienkripsi dengan kunci master.

      • KMS: Gunakan kunci master pelanggan (CMK) default yang dikelola oleh KMS atau CMK tertentu untuk enkripsi dan dekripsi.

        Untuk menggunakan enkripsi KMS, aktifkan KMS terlebih dahulu. Beli instans Dedicated KMS.

        Berikut ini adalah deskripsi parameter CMK:

        Kunci enkripsi dalam format <alias>(CMK ID), di mana <alias> adalah alias CMK dan CMK ID adalah ID CMK. Nilai yang valid:

        • alias/acs/oss(CMK ID): CMK default yang dikelola KMS digunakan untuk menghasilkan kunci berbeda guna mengenkripsi objek berbeda. Objek secara otomatis didekripsi saat diunduh.

        • alias/<cmkname>(CMK ID): Opsi ini menggunakan CMK tertentu untuk menghasilkan kunci enkripsi unik bagi setiap objek. Metadata objek menyimpan ID CMK. Saat pengguna dengan izin yang diperlukan mengunduh objek, OSS secara otomatis mendekripsinya. <cmkname> adalah alias opsional CMK yang Anda tentukan saat membuat CMK.

          Sebelum menggunakan ID CMK tertentu, buat kunci reguler atau kunci eksternal di wilayah yang sama dengan bucket di KMS console. Untuk informasi selengkapnya, lihat Create a CMK.

      • Encryption Algorithm: Hanya AES256 yang didukung.

      User-defined Metadata

      Tambahkan informasi deskriptif ke objek. Anda dapat menambahkan beberapa entri metadata yang ditentukan pengguna. Ukuran total semua metadata yang ditentukan pengguna tidak boleh melebihi 8 KB. Setiap kunci metadata yang ditentukan pengguna harus diawali dengan x-oss-meta- dan diberi nilai. Contoh: x-oss-meta-location:hangzhou.

    3. Klik Upload Object.

      Anda dapat melihat progres unggah setiap file di tab Upload Tasks pada panel Task List.

Gunakan SDK Alibaba Cloud

Kode berikut mengunggah objek ke bucket yang telah diaktifkan versioning. Untuk SDK lainnya, lihat SDK overview.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;

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";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. 
        String objectName = "exampledir/object";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Dalam contoh ini, string diunggah sebagai objek. 
            String content = "Hello OSS";
            PutObjectResult result = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
            // Tampilkan ID versi objek. 
            System.out.println("result.versionid: " + result.getVersionId());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            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("Terjadi 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: 'yourregion',
  // 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: 'yourbucketname'
});

async function put() {
  const result = await client.put('fileName', path.normalize('D:\\localpath\\examplefile.txt'));
  console.log(result.res.headers['x-oss-version-id']); // Tampilkan ID versi objek yang diunggah. 
}
put();
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Atur yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Atur bucketName ke nama bucket, misalnya examplebucket.
var bucketName = "examplebucket";
// Atur objectName ke path lengkap objek. Path lengkap tidak boleh menyertakan nama bucket. Misalnya, exampledir/exampleobject.txt.
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";
// Atur region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan.
var conf = new ClientConfiguration();

// Gunakan Signature Version 4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // Unggah objek.
    var result = client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded versionid : {0}", result.VersionId);
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap Objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* Unggah file. */
    auto outcome = client.PutObject(request);

    if (outcome.isSuccess()) {
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
        /* Tangani pengecualian. */
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"
	"strings"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Definisikan fungsi init yang digunakan untuk menginisialisasi parameter.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Tentukan konten yang ingin Anda unggah.
	content := "hi oss"

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengunggah objek.
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName),        // Nama bucket.
		Key: oss.Ptr(objectName),        // Nama objek.
		Body:   strings.NewReader(content), // Konten yang ingin Anda unggah.
	}

	// Jalankan permintaan untuk mengunggah objek.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Tampilkan ID versi objek.
	log.Printf("put object result versionId:%#v\n", *result.VersionId)
}
import argparse
import requests
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object sample")
# Konfigurasikan argumen baris perintah --region untuk menentukan wilayah tempat bucket berada. Argumen ini wajib diisi.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# Konfigurasikan argumen baris perintah --bucket untuk menentukan nama bucket. Argumen ini wajib diisi.
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# Konfigurasikan argumen baris perintah --endpoint untuk menentukan titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# Konfigurasikan argumen baris perintah --key untuk menentukan nama objek. Argumen ini wajib diisi.
parser.add_argument('--key', help='The name of the object.', required=True)

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

    # Dapatkan kredensial akses dari variabel lingkungan untuk otentikasi.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Dapatkan konfigurasi default SDK dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # Tentukan wilayah tempat bucket berada.
    cfg.region = args.region
    # Jika parameter titik akhir disediakan, tentukan titik akhir.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Gunakan konfigurasi untuk membuat instans OSSClient.
    client = oss.Client(cfg)

    # Unggah file lokal.
    local_file_path = '/yourLocalFilePath/yourFileName'
    with open(local_file_path, 'rb') as file:
        data = file.read()

    # Jalankan permintaan untuk mengunggah objek, dan tentukan nama bucket, nama objek, dan konten data.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # Tampilkan kode status HTTP dalam tanggapan, ID permintaan, dan hash MD5, ETag, nilai CRC-64, dan ID versi objek untuk memeriksa apakah permintaan berhasil.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

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

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Jelaskan parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS', 'required' => False], // (Opsional) Tentukan endpoint OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Wajib) Tentukan nama objek.
];

// Hasilkan daftar opsi panjang untuk mengurai parameter baris perintah.
$longopts = \array_map(function ($key) {
    return "$key:"; // Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));

// Uraikan parameter baris perintah.
$options = getopt("", $longopts);

// Periksa apakah parameter wajib hilang.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: argumen berikut diperlukan: --$key, $help"; // Tampilkan parameter wajib yang hilang.
        exit(1);
    }
}

// Dapatkan nilai parameter baris perintah dan tetapkan nilai ke variabel.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.

// Muat ID AccessKey dan rahasia AccessKey dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();

// Tentukan penyedia kredensial.
$cfg->setCredentialsProvider($credentialsProvider);

// Tentukan wilayah.
$cfg->setRegion($region);

// Jika endpoint disediakan, tentukan endpoint.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

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

// Tentukan data yang ingin Anda unggah.
$data = 'Hello OSS';

// Buat permintaan unggah sederhana.
$request = new Oss\Models\PutObjectRequest(
                bucket: $bucket,
                key: $key,
            );

// Atur isi permintaan ke aliran data.
$request->body = Oss\Utils::streamFor($data);

// Gunakan metode putObject untuk mengunggah data.
$result = $client->putObject($request);

// Tampilkan hasil yang dikembalikan.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP.
    'request id:' . $result->requestId . PHP_EOL . // ID permintaan.
    'etag:' . $result->etag . PHP_EOL // ETag objek.
);

Gunakan ossutil

Untuk mengunggah objek ke bucket yang telah diaktifkan versioning menggunakan ossutil, lihat cp (upload objects).

Gunakan REST API

Anda juga dapat memanggil REST API secara langsung. PutObject.

Daftar objek

Di bucket yang telah diaktifkan versioning, panggil GetBucketVersions (ListObjectVersions) untuk mengambil informasi tentang semua versi objek, termasuk objek yang ditandai sebagai dihapus.

  • Operasi GetBucket (ListObject) hanya mengembalikan versi objek saat ini dan mengecualikan objek yang ditandai sebagai dihapus.

  • Satu permintaan GetBucketVersions (ListObjectVersions) mengembalikan hingga 1.000 versi objek. Untuk mengambil semua versi, kirim beberapa permintaan.

    Misalnya, jika bucket berisi dua kunci, example.jpg dan photo.jpg, di mana example.jpg memiliki 900 versi dan photo.jpg memiliki 500 versi, satu permintaan akan mencantumkan semua 900 versi example.jpg dan 100 versi pertama photo.jpg. Hasil diurutkan berdasarkan kunci secara leksikografis, lalu berdasarkan versi.

GetBucketVersions (ListObjectVersions) mengembalikan semua versi semua objek di bucket, termasuk objek yang ditandai sebagai dihapus. GetBucket (ListObject) hanya mengembalikan versi objek saat ini dan mengecualikan objek yang ditandai sebagai dihapus.

Konsol OSS

  1. Masuk ke OSS console.

  2. Klik Buckets, lalu klik nama bucket target.

    Halaman ini menampilkan daftar versi saat ini setiap objek secara terpaginasi. Untuk melihat semua versi, termasuk penanda hapus, buka halaman Objects dan klik Show di sebelah Previous Versions.

SDK OSS

Kode berikut mencantumkan objek di bucket yang telah diaktifkan versioning. Untuk SDK lainnya, lihat SDK introduction.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

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";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Cantumkan versi semua objek, termasuk penanda hapus di bucket. 
            String nextKeyMarker = null;
            String nextVersionMarker = null;
            VersionListing versionListing = null;
            do {
                ListVersionsRequest listVersionsRequest = new ListVersionsRequest()
                        .withBucketName(bucketName)
                        .withKeyMarker(nextKeyMarker)
                        .withVersionIdMarker(nextVersionMarker);

                versionListing = ossClient.listVersions(listVersionsRequest);
                for (OSSVersionSummary ossVersion : versionListing.getVersionSummaries()) {
                    System.out.println("key name: " + ossVersion.getKey());
                    System.out.println("versionid: " + ossVersion.getVersionId());
                    System.out.println("Is latest: " + ossVersion.isLatest());
                    System.out.println("Is delete marker: " + ossVersion.isDeleteMarker());
                }

                nextKeyMarker = versionListing.getNextKeyMarker();
                nextVersionMarker = versionListing.getNextVersionIdMarker();
            } while (versionListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            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("Terjadi 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({
  // Atur region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur region ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket.
  bucket: 'yourbucketname'
});

// Cantumkan informasi versi semua objek, termasuk penanda hapus.
async function getObjectVersions() {
  let nextKeyMarker = null;
  let nextVersionMarker = null;
  let versionListing = null;
  do {
    versionListing = await client.getBucketVersions({
      keyMarker: nextKeyMarker,
      versionIdMarker: nextVersionMarker,
    });

    versionListing.objects.forEach((o) => {
      console.log(`${o.name}, ${o.versionId}`);
    });
    versionListing.deleteMarker.forEach((o) => {
      console.log(`${o.name}, ${o.versionId}`);
    });

    nextKeyMarker = versionListing.NextKeyMarker;
    nextVersionMarker = versionListing.NextVersionIdMarker;
  } while (versionListing.isTruncated);
}

getObjectVersions();
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip.
parser = argparse.ArgumentParser(description="list object versions sample")

# Tentukan parameter --region untuk menunjukkan wilayah tempat bucket berada. Parameter ini diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tentukan parameter --bucket untuk menunjukkan nama bucket. Parameter ini diperlukan.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tentukan parameter --endpoint untuk menunjukkan titik akhir wilayah tempat bucket berada. Parameter ini bersifat opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')

def main():
    # Urai argumen baris perintah untuk mendapatkan nilai yang ditentukan.
    args = parser.parse_args()

    # Dari variabel lingkungan, muat informasi otentikasi yang diperlukan untuk mengakses OSS.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Gunakan konfigurasi default untuk membuat objek cfg dan tentukan penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # Jika titik akhir kustom disediakan, perbarui atribut titik akhir objek cfg dengan titik akhir yang disediakan.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Gunakan pengaturan sebelumnya untuk menginisialisasi instans OSSClient.
    client = oss.Client(cfg)

    # Buat objek Paginator yang digunakan untuk mendaftar versi objek per halaman.
    paginator = client.list_object_versions_paginator()

    # Lakukan iterasi pada halaman.
    for page in paginator.iter_page(oss.ListObjectVersionsRequest(
            bucket=args.bucket,  # Nama bucket.
        )
    ):
        # Lakukan iterasi pada versi objek di halaman saat ini.
        for o in page.version:
            # Cetak informasi berikut tentang setiap versi objek:
            # - key: kunci objek.
            # - size: ukuran objek (byte).
            # - version_id: ID versi.
            # - last_modified: waktu terakhir diubah.
            print(f'Object version: {o.key}, Size: {o.size}, Version_id: {o.version_id}, Last_modified: {o.last_modified}')


# Panggil fungsi utama untuk memulai logika pemrosesan saat skrip dijalankan secara langsung.
if __name__ == "__main__":
    main()  # Tentukan titik masuk skrip. Alur kontrol dimulai di sini.

ossutil

Untuk mencantumkan objek di bucket yang telah diaktifkan versioning menggunakan ossutil, lihat ls (List resources at the account level).

RESTful API

Anda juga dapat memanggil REST API secara langsung. ListObjectVersions (GetBucketVersions).

Unduh objek

Anda dapat mengunduh versi saat ini atau versi tertentu dari objek.

Permintaan GET tanpa ID versi mengembalikan versi saat ini.

Jika versi saat ini ditandai sebagai dihapus, permintaan GET mengembalikan 404 Not Found.

Permintaan GET dengan ID versi mengembalikan versi historis yang ditentukan.

Gunakan Konsol OSS

  1. Masuk ke OSS console.

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

  3. Di panel navigasi sebelah kiri, pilih Object Management > Objects.

  4. Di halaman Objects, klik Show di sebelah kanan Previous Versions.

  5. Klik versi objek yang ingin Anda unduh. Di panel yang muncul, klik Download di sebelah kanan Object URL.

Gunakan SDK OSS

Kode berikut mengunduh objek dari bucket yang telah diaktifkan versioning. Untuk SDK lainnya, lihat SDK overview.

const OSS = require('ali-oss');

const client = new OSS({
  // Atur yourregion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur Region ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Atur yourbucketname ke nama bucket.
  bucket: 'yourbucketname'
});

async function get() {
  // Nama file.
  const result = await client.get('filename', {    
      // ID versi file yang akan diunduh.
      versionId: 'versionid',
  });
  console.log(result.content);
}
get();
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket, seperti examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket, seperti exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Unduh file ke memori lokal. */
    GetObjectRequest request(BucketName, ObjectName);
    request.setVersionId("yourObjectVersionId");
    auto outcome = client.GetObject(request);
    if (outcome.isSuccess()) {
        std::cout << "getObjectToBuffer" << " success, Content-Length:" << outcome.result().Metadata().ContentLength() << std::endl;
        /* Baca konten objek yang diunduh. */
        std::string content;
        *(outcome.result().Content()) >> content;
        std::cout << "getObjectToBuffer" << "content:" << content << std::endl;
        /* Lihat ID versi objek yang diunduh. */
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
            /* Tangani pengecualian. */
            std::cout << "getObjectToBuffer fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
import argparse
import alibabacloud_oss_v2 as oss

// Buat parser parameter baris perintah
parser = argparse.ArgumentParser(description="contoh ambil objek")

// Tentukan parameter --region untuk menunjukkan wilayah tempat bucket berada. Parameter ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
// Tentukan parameter --bucket, yang menentukan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
// Tentukan parameter --endpoint untuk menunjukkan endpoint wilayah tempat bucket berada. Parameter ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
// Tentukan parameter --key, yang menentukan nama objek. Parameter baris perintah ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
// Tentukan parameter --version_id, yang menentukan ID versi objek sumber. Parameter baris perintah ini wajib.
parser.add_argument('--version_id', help='ID versi objek.', required=True)

def main():
    // Parsing parameter baris perintah.
    args = parser.parse_args()

    // Dapatkan kredensial akses dari variabel lingkungan untuk autentikasi.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

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

    // Tentukan wilayah tempat bucket berada.
    cfg.region = args.region

    // Jika parameter endpoint disediakan, tentukan endpoint.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    // Gunakan konfigurasi untuk membuat instance OSSClient.
    client = oss.Client(cfg)

    // Jalankan permintaan untuk mengunduh objek, dan tentukan nama bucket dan nama objek.
    result = client.get_object(oss.GetObjectRequest(
        bucket=args.bucket,  // Tentukan nama bucket.
        key=args.key,  // Tentukan nama objek.
        version_id=args.version_id, // Tentukan ID versi.
    ))

    // Tampilkan respons untuk memeriksa apakah permintaan berhasil.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content length: {result.content_length},'
          f' content range: {result.content_range},'
          f' content type: {result.content_type},'
          f' etag: {result.etag},'
          f' last modified: {result.last_modified},'
          f' content md5: {result.content_md5},'
          f' cache control: {result.cache_control},'
          f' content disposition: {result.content_disposition},'
          f' content encoding: {result.content_encoding},'
          f' expires: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' storage class: {result.storage_class},'
          f' object type: {result.object_type},'
          f' version id: {result.version_id},'
          f' tagging count: {result.tagging_count},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' next append position: {result.next_append_position},'
          f' expiration: {result.expiration},'
          f' restore: {result.restore},'
          f' process status: {result.process_status},'
          f' delete marker: {result.delete_marker},'
    )

    // Baca konten objek.
    content = result.body.read()

    // Simpan konten ke file lokal. Dalam contoh ini, file lokal diberi nama test.txt.
    with open('./test.txt', 'wb') as f:
        f.write(content)

    print(f'File berhasil disimpan ke test.txt!')

// Panggil fungsi main saat skrip dijalankan secara langsung.
if __name__ == "__main__":
    main()  // Tentukan titik masuk dalam fungsi main skrip saat skrip dijalankan secara langsung.
package main

import (
	"context"
	"flag"
	"io"
	"log"
	"os"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket Anda berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Tentukan path file output.
	outputFile := "downloaded.file" // Ganti parameter ini dengan path tempat Anda ingin menyimpan file.

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan kueri.
	request := &oss.GetObjectRequest{
		Bucket:    oss.Ptr(bucketName),      // Nama bucket
		Key:       oss.Ptr(objectName),      // Nama objek
		VersionId: oss.Ptr("yourVersionId"), // ID versi objek
	}

	// Lakukan operasi kueri dan proses hasilnya.
	result, err := client.GetObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mendapatkan objek %v", err)
	}
	defer result.Body.Close() // Pastikan badan respons ditutup saat fungsi selesai.

	// Baca seluruh file.
	data, err := io.ReadAll(result.Body)
	if err != nil {
		log.Fatalf("gagal membaca objek %v", err)
	}

	// Tulis konten ke file.
	err = os.WriteFile(outputFile, data, 0644)
	if err != nil {
		log.Fatalf("gagal menulis ke file output %v", err)
	}

	log.Printf("file berhasil diunduh ke %s", outputFile)
}
<?php

// Perkenalkan file autoload untuk memuat pustaka dependensi.
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], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan endpoint yang dapat digunakan layanan lain untuk mengakses OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Wajib) Tentukan nama objek.
];

// Ubah deskripsi menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

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

// Periksa apakah parameter wajib dikonfigurasi.
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 wajib tidak dikonfigurasi.
    }
}

// Dapatkan nilai dari parameter yang diuraikan.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.

// Muat 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 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 endpoint jika disediakan.
}

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

// Buat objek GetObjectRequest untuk mendapatkan konten objek tertentu.
$request = new Oss\Models\GetObjectRequest(
                bucket: $bucket,
                key: $key,
                versionId:"yourVersionId",// Tentukan ID versi objek.
);

// Kueri objek.
$result = $client->getObject($request);

// Tentukan path lokal untuk menyimpan objek.
$localFilePath = './test/file.txt'; // Ganti parameter ini dengan path file lokal yang sebenarnya.

// Tulis konten ke file lokal.
file_put_contents($localFilePath, $result->body->getContents());

// Tampilkan hasilnya.
// Keluarkan kode status HTTP, ID permintaan, dan konten objek.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
    'request id:' . $result-> requestId. PHP_EOL // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
);

Gunakan ossutil

Untuk mengunduh objek dari bucket yang telah diaktifkan versioning menggunakan ossutil, lihat cp (download objects).

Gunakan REST API

Anda juga dapat memanggil REST API secara langsung. GetObject.

Hapus objek

Di bucket yang telah diaktifkan versioning, Anda dapat menghapus objek secara permanen dengan menentukan ID versinya atau dengan mengonfigurasi aturan lifecycle. Jika Anda menghapus objek tanpa menentukan ID versi, objek tersebut ditandai sebagai dihapus dan versi historisnya tidak terpengaruh.

Penting
  • Setelah Anda mengaktifkan versioning, menghapus objek tanpa menentukan ID versi tidak menghapus versi saat ini atau versi non-saat ini secara default.

  • Jangan aktifkan layanan OSS-HDFS dan versioning pada bucket yang sama. Hal ini dapat menyebabkan ketidakstabilan layanan. Untuk memastikan operasi yang stabil, segera nonaktifkan versioning dan konfigurasikan aturan lifecycle untuk membersihkan penanda hapus.

    Bagaimana cara menangani bucket yang telah diaktifkan OSS-HDFS dan versioning?.

  • Expiration: Berlaku untuk versi saat ini objek dan mempertahankan versi saat ini yang kedaluwarsa sebagai versi historis.

  • NoncurrentVersionExpiration: Berlaku untuk versi non-saat ini objek. Tindakan ini menghapus versi tersebut secara permanen.

Untuk menggunakan versioning dengan aturan lifecycle, lihat Lifecycle configuration elements.

  • Jika Anda tidak menentukan ID versi, objek ditandai sebagai dihapus. Versi historis tidak terpengaruh dan dapat dipulihkan nanti.

  • Jika Anda menentukan ID versi, OSS menghapus versi objek yang ditentukan secara permanen.

Konsol OSS

Untuk meminimalkan biaya penyimpanan, kami merekomendasikan agar Anda menghapus versi sebelumnya dari objek yang tidak lagi Anda butuhkan sesegera mungkin.

Peringatan

Versi non-saat ini objek tidak dapat dipulihkan setelah dihapus secara permanen. Harap berhati-hati.

  1. Masuk ke OSS console.

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

  3. Di panel navigasi sebelah kiri, pilih Object Management > Objects.

  4. Di halaman Objects, klik Show di sebelah Previous Versions.

  5. Temukan versi non-saat ini yang tidak diperlukan dan lakukan salah satu hal berikut:

    • Untuk menghapus penanda hapus, klik Permanently Delete di kolom Actions.

    • Untuk menghapus versi objek, arahkan pointer ke ikon image.png di kolom Actions dan klik Permanently Delete.

    Anda juga dapat memilih beberapa versi non-saat ini dan mengklik Permanently Delete di bagian bawah halaman.

  6. Klik OK.

    Anda juga dapat mengonfigurasi aturan lifecycle untuk menghapus versi non-saat ini secara berkala. Overview of lifecycle rules.

SDK OSS

Kode berikut menghapus versi tertentu dari bucket yang telah diaktifkan versioning. Untuk SDK lainnya, lihat SDK overview.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

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";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket. 
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. 
        String objectName = "exampledir/object";
        String versionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Hapus versi objek yang ditentukan. 
            ossClient.deleteVersion(bucketName, objectName , versionId);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            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("Terjadi 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({
  // Ganti yourregion dengan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Ganti yourbucketname dengan nama bucket.
  bucket: 'yourbucketname'
});

// Tentukan versionId objek.
const versionId = "versionId";
// Tentukan objek.
const objectName = "exampleobject.txt";
async function deleteVersionObject() {
  const result = await client.delete(objectName, {
    versionId,
  });
  console.log(result);
}

deleteVersionObject();
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket. 
var bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. 
var objectName = "exampledir/exampleobject.txt";
// Tentukan ID versi objek atau penanda hapus. 
var versionid = "yourObjectVersionidOrDelMarkerVersionid";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Tentukan ID versi objek atau penanda hapus yang ingin Anda hapus. 
    var request = new DeleteObjectRequest(bucketName, objectName)
    {
        VersionId = versionid
    };
    client.DeleteObject(request);
    Console.WriteLine("Hapus objek berhasil");
}
catch (Exception ex)
{
    Console.WriteLine("Hapus objek gagal. {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket, misalnya examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Misalnya, exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Hapus objek dengan versionId tertentu atau objek yang terkait dengan penanda hapus yang memiliki versionId tertentu. */
    auto outcome = client.DeleteObject(DeleteObjectRequest(BucketName, ObjectName, "yourObjectVersionIdOrDeleteMarkerVersionId"));
    /* Jika versionId objek ditentukan, delete_marker yang dikembalikan adalah None dan versionId yang dikembalikan adalah versionId objek yang ditentukan. */
    /* Jika versionId penanda hapus ditentukan, delete_marker yang dikembalikan adalah True dan versionId yang dikembalikan adalah versionId penanda hapus yang ditentukan. */
    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "DeleteObject gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// init digunakan untuk menginisialisasi flag baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing flag baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket disediakan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah disediakan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek disediakan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Muat konfigurasi default dan atur penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk menghapus objek.
	request := &oss.DeleteObjectRequest{
		Bucket:    oss.Ptr(bucketName),      // Nama bucket.
		Key:       oss.Ptr(objectName),      // Nama objek.
		VersionId: oss.Ptr("yourVersionId"), // Ganti dengan versionId aktual objek.
	}

	// Jalankan operasi penghapusan dan tangani hasilnya.
	result, err := client.DeleteObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal menghapus objek %v", err)
	}

	// Cetak hasilnya.
	log.Printf("hasil hapus objek:%#v\n", result)
}
<?php

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

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan 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], // Endpoint. 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.
// Tambahkan tanda titik dua (:) setelah setiap argumen untuk menunjukkan bahwa argumen memerlukan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

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

// Verifikasi bahwa semua argumen wajib ditentukan.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan argumen.
        echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
        exit(1); // Jika argumen wajib hilang, keluar dari program.
    }
}

// Ambil nilai dari argumen yang 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 ID Access Key dan Rahasia Access Key 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 endpoint disediakan, atur endpoint.
}

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

// Buat objek DeleteObjectRequest untuk menghapus objek tertentu.
$request = new Oss\Models\DeleteObjectRequest(
            bucket: $bucket,
            key: $key,
            versionId:"yourversionid", // Tentukan nomor versi objek yang akan dihapus.
);

// Jalankan operasi hapus objek.
$result = $client->deleteObject($request);

// Cetak hasil penghapusan.
// Keluarkan kode status HTTP dan ID permintaan untuk memverifikasi apakah penghapusan berhasil.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 204 menunjukkan bahwa penghapusan berhasil.
    'request id:' . $result->requestId . PHP_EOL     // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
);

ossutil

Untuk menghapus objek dari bucket yang telah diaktifkan versioning menggunakan ossutil, lihat rm (delete).

REST API

Anda juga dapat memanggil REST API secara langsung. DeleteObject.

Pulihkan objek

Saat versioning diaktifkan, OSS menyimpan semua versi objek. Anda dapat memulihkan versi sebelumnya agar menjadi versi saat ini.

Anda dapat memulihkan versi sebelumnya dengan dua cara:

  • Salin versi sebelumnya objek

    Salin versi historis tertentu ke bucket yang sama. Objek yang disalin menjadi versi saat ini, dan semua versi historis yang ada dipertahankan.

  • Hapus secara permanen versi saat ini objek

    Hapus secara permanen versi saat ini dengan menentukan ID versinya. Versi historis berikutnya menjadi versi saat ini.

Penting

Versi yang dihapus secara permanen tidak dapat dipulihkan. Kami merekomendasikan memulihkan versi sebelumnya dengan menyalinnya.

Gunakan Konsol OSS

  1. Masuk ke OSS console.

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

  3. Di panel navigasi sebelah kiri, pilih Object Management > Objects.

  4. Di halaman Objects, klik Show di sebelah kanan Previous Versions.

  5. Pulihkan versi sebelumnya objek.

    Penting

    Anda hanya dapat memulihkan satu versi objek dalam satu waktu. Penanda hapus tidak dapat dipulihkan.

    • Untuk memulihkan satu objek

      Di kolom Actions versi yang diinginkan, klik Restore.

    • Untuk memulihkan beberapa objek

      Pilih versi sebelumnya yang diinginkan, klik Restore di bagian bawah halaman, lalu klik OK di kotak dialog yang muncul.

Gunakan SDK OSS

Kode berikut menyalin versi tertentu di bucket yang telah diaktifkan versioning. Untuk SDK lainnya, lihat SDK overview.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

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";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket sumber. 
        String sourceBucketName = "srcexamplebucket";
        // Tentukan path lengkap objek sumber. Jangan sertakan nama bucket dalam path lengkap. 
        String sourceObjectName = "srcexampleobject.txt";
        // Tentukan nama bucket tujuan. Bucket tujuan harus berada di wilayah yang sama dengan bucket sumber. 
        String destinationBucketName = "desexamplebucket";
        // Tentukan path lengkap objek tujuan. Jangan sertakan nama bucket dalam path lengkap. 
        String destinationObjectName = "desexampleobject.txt";
        String versionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
            copyObjectRequest.setSourceVersionId(versionId);
            CopyObjectResult copyObjectResult = ossClient.copyObject(copyObjectRequest);
            System.out.println("ETag: " + copyObjectResult.getETag() + " LastModified: " + copyObjectResult.getLastModified());
            System.out.println("dest object versionid: " + copyObjectResult.getVersionId());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            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("Terjadi 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({
  // Atur yourregion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Atur yourbucketname ke nama bucket.
  bucket: 'yourbucketname'
});

// Tentukan versionId objek sumber.
const versionId = 'versionId';
// Tentukan objek sumber.
const srcObject = 'srcObject.txt';
// Tentukan bucket sumber.
const srcBucket = 'srcBucket';
// Tentukan objek tujuan.
const targetObject = 'targetObject.txt';
async function Copy() {
  try {
    const result = await client.copy(targetObject, srcObject, srcBucket, {
      meta: {
        versionId: versionId
      }
    });

    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

Copy()
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket sumber. 
var sourceBucket = "yourSourceBucketName";
// Tentukan path lengkap objek sumber. Jangan sertakan nama bucket dalam path lengkap. 
var sourceObject = "yourSourceObjectName";
// Tentukan nama bucket tujuan. Bucket tujuan harus berada di wilayah yang sama dengan bucket sumber. 
var targetBucket = "yourDestBucketName";
// Tentukan path lengkap objek tujuan. Jangan sertakan nama bucket dalam path lengkap. 
var targetObject = "yourDestObjectName";
// Tentukan ID versi objek sumber. 
var versionid = "yourArchiveObjectVersionid";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan ubah parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma signature V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var metadata = new ObjectMetadata();
    metadata.AddHeader("mk1", "mv1");
    metadata.AddHeader("mk2", "mv2");
    var req = new CopyObjectRequest(sourceBucket, sourceObject, targetBucket, targetObject)
    {
        // Jika nilai NewObjectMetadata adalah null, mode COPY digunakan dan metadata objek sumber disalin ke objek tujuan. Jika nilai NewObjectMetadata tidak null, mode REPLACE digunakan dan metadata objek sumber menimpa metadata objek tujuan. 
        NewObjectMetadata = metadata, 
        // Tentukan ID versi objek. 
        SourceVersionId = versionid
    };
    // Salin objek. 
    var result = client.CopyObject(req);
    Console.WriteLine("Salin objek berhasil, vesionid:{0}", result.VersionId);
}
catch (OssException ex)
{
    Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nID Permintaan: {2} \tID Host: {3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur Endpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur Region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket sumber. Contoh: srcexamplebucket. */
    std::string SourceBucketName = "srcexamplebucket";
    /* Tentukan nama bucket tujuan, yang harus berada di wilayah yang sama dengan bucket sumber. Contoh: destbucket. */
    std::string CopyBucketName = "destbucket";
    /* Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket. Contoh: srcdir/scrobject.txt. */
    std::string SourceObjectName = "srcdir/scrobject.txt";
    /* Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Contoh: destdir/destobject.txt. */
    std::string CopyObjectName = "destdir/destobject.txt";


    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    CopyObjectRequest request(CopyBucketName, CopyObjectName);
    request.setCopySource(SourceBucketName, SourceObjectName);
    /* Tentukan ID versi objek sumber. */
    request.setVersionId("yourSourceObjectVersionId");

    /* Salin versi objek tertentu. */
    auto outcome = client.CopyObject(request);

    if (outcome.isSuccess()) {
        std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
    }
    else {
        /* Tangani pengecualian. */
        std::cout << "CopyObject gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region         string // Wilayah tempat objek disimpan.
	srcBucketName  string // Nama bucket sumber.
	srcObjectName  string // Nama objek sumber.
	destBucketName string // Nama bucket tujuan.
	destObjectName string // Nama objek tujuan.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&srcBucketName, "src-bucket", "", "Nama bucket sumber.")
	flag.StringVar(&srcObjectName, "src-object", "", "Nama objek sumber.")
	flag.StringVar(&destBucketName, "dest-bucket", "", "Nama bucket tujuan.")
	flag.StringVar(&destObjectName, "dest-object", "", "Nama objek tujuan.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket sumber ditentukan.
	if len(srcBucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket sumber diperlukan")
	}

	// Periksa apakah wilayah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Jika nama bucket tujuan tidak ditentukan, nama bucket sumber akan digunakan.
	if len(destBucketName) == 0 {
		destBucketName = srcBucketName
	}

	// Periksa apakah nama objek sumber ditentukan.
	if len(srcObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek sumber diperlukan")
	}

	// Periksa apakah nama objek tujuan ditentukan.
	if len(destObjectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek tujuan diperlukan")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan salin.
	copyRequest := &oss.CopyObjectRequest{
		Bucket:           oss.Ptr(destBucketName),            // Nama bucket tujuan.
		Key:              oss.Ptr(destObjectName),            // Nama objek tujuan.
		SourceKey:        oss.Ptr(srcObjectName),             // Nama objek sumber.
		SourceBucket:     oss.Ptr(srcBucketName),             // Nama bucket sumber.
		SourceVersionId:  oss.Ptr("yourVersionId"),           // Tentukan ID versi aktual objek sumber.
		StorageClass:     oss.StorageClassStandard,           // Atur kelas penyimpanan ke Standard.
		TaggingDirective: oss.Ptr("Replace"),                 // Tag objek sumber tidak disalin.
		Tagging:          oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag aktual objek tujuan.
	}

	// Lakukan operasi dan proses hasilnya.
	copyResult, err := client.CopyObject(context.TODO(), copyRequest)
	if err != nil {
		log.Fatalf("gagal menyalin objek: %v", err)
	}

	// Tampilkan hasilnya.
	log.Printf("hasil salin objek versionId:%#v\n", *copyResult.VersionId)

}
<?php

// Sertakan file autoload untuk memuat dependensi.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

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

// Ubah deskripsi parameter menjadi daftar opsi panjang yang diperlukan oleh getopt.
// Tambahkan tanda titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parsing parameter baris perintah.
$options = getopt("", $longopts);

// Periksa apakah parameter wajib dikonfigurasi.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan tentang parameter.
        echo "Error: argumen berikut diperlukan: --$key, $help" . PHP_EOL;
        exit(1); // Jika parameter wajib tidak dikonfigurasi, keluar dari program.
    }
}

// Dapatkan nilai dari parameter yang diuraikan.
$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.
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default 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 endpoint jika endpoint disediakan.
}

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

// Buat objek CopyObjectRequest untuk menyalin objek sumber.
$request = new Oss\Models\CopyObjectRequest(
            bucket: $bucket,
            key: $key,
            sourceVersionId: "yourVersionId",// Tentukan ID versi objek sumber.
);

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

// Lakukan operasi salin objek.
$result = $client->copyObject($request);

// Tampilkan hasil salin objek.
printf(
    'status code:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
    'request id:' . $result-> requestId. PHP_EOL //  ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
);
import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah dan jelaskan tujuan skrip: menyalin objek dalam bucket.
parser = argparse.ArgumentParser(description="copy object sample")

# Tentukan argumen baris perintah, termasuk wilayah yang diperlukan, nama bucket tujuan, nama bucket sumber, nama objek tujuan, nama objek sumber, ID versi objek sumber, dan titik akhir opsional.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket tujuan.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--key', help='Nama objek tujuan.', required=True)
parser.add_argument('--source_key', help='Nama objek sumber.', required=True)
parser.add_argument('--source_bucket', help='Nama bucket sumber.', required=True)
parser.add_argument('--source_version_id', help='ID versi objek sumber.',required=True)

def main():
    # Urai argumen baris perintah untuk mendapatkan nilai yang dimasukkan oleh pengguna.
    args = parser.parse_args()

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

    # Gunakan konfigurasi SDK default untuk membuat objek konfigurasi dan mengatur penyedia otentikasi.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Atur properti wilayah dari objek konfigurasi berdasarkan argumen baris perintah.
    cfg.region = args.region

    # Jika titik akhir kustom disediakan, perbarui properti titik akhir di objek konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Gunakan konfigurasi sebelumnya untuk menginisialisasi klien OSS dan mempersiapkan interaksi dengan OSS.
    client = oss.Client(cfg)

    # Kirim permintaan untuk menyalin objek yang ditentukan.
    result = client.copy_object(oss.CopyObjectRequest(
        bucket=args.bucket,  # Nama bucket tujuan.
        key=args.key,  # Nama objek tujuan.
        source_key=args.source_key,  # Nama objek sumber.
        source_bucket=args.source_bucket,  # Nama bucket sumber.
        source_version_id=args.source_version_id,  # ID versi objek sumber.
    ))

    # Cetak informasi tentang hasil operasi untuk mengonfirmasi status permintaan.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version id: {result.version_id},'
          f' hash crc64: {result.hash_crc64},'
          f' source version id: {result.source_version_id},'
          f' server side encryption: {result.server_side_encryption},'
          f' server side data encryption: {result.server_side_data_encryption},'
          f' last modified: {result.last_modified},'
          f' etag: {result.etag},'
          )

# Saat skrip ini dieksekusi secara langsung, panggil fungsi utama untuk memulai logika pemrosesan.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Alur program dimulai di sini.

Gunakan ossutil

Untuk memulihkan versi sebelumnya menggunakan ossutil, lihat revert (restore versions).

Gunakan RESTful API

Anda juga dapat memanggil REST API secara langsung. CopyObject.