Jika Anda mengaktifkan versioning untuk bucket, Object Storage Service (OSS) akan menetapkan ID unik ke setiap versi objek dalam bucket tersebut. Konten dan access control list (ACL) objek yang sudah ada di bucket tetap tidak berubah. Versioning juga melindungi objek dari penimpaan atau penghapusan yang tidak disengaja serta memungkinkan Anda melakukan kueri atau memulihkan versi sebelumnya.
Catatan penggunaan
Perhatikan hal-hal berikut saat Anda mengunggah, mencantumkan, mengunduh, menghapus, atau memulihkan objek di bucket yang telah diaktifkan versioning:
-
OSS menyimpan satu versi saat ini dan nol atau lebih versi sebelumnya untuk setiap objek.
-
Objek yang sudah ada di bucket sebelum Anda mengaktifkan versioning memiliki ID versi null.
-
Untuk kejelasan, ID versi pada gambar dalam topik ini telah disederhanakan.
-
Aturan siklus hidup yang mengubah objek ke kelas penyimpanan berbeda tidak membuat versi baru.
Untuk informasi selengkapnya, lihat Versioning.
Unggah objek
Saat Anda mengunggah objek ke bucket yang diaktifkan versioning, OSS secara otomatis menetapkan ID versi unik ke objek yang diunggah tersebut.
Operasi seperti PutObject, PostObject, CopyObject, dan MultipartUpload secara otomatis menetapkan ID versi unik ke setiap objek yang baru dibuat.
Saat Anda mengunggah objek dengan operasi PUT, OSS menetapkan ID versi unik, misalnya 111111.
Saat Anda menggunakan operasi PUT untuk mengunggah objek dengan nama yang sama (key=example.jpg), versi objek asli (ID=111111) menjadi versi sebelumnya, dan versi baru (ID=222222) disimpan di bucket sebagai versi saat ini. Jika Anda mengunggah objek dengan nama yang sama lagi, versi objek asli (termasuk ID=111111 dan ID=222222) menjadi versi sebelumnya, dan versi baru (ID=333333) disimpan di bucket sebagai versi saat ini.

Gunakan Konsol OSS
-
Masuk ke OSS console.
-
Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.
-
Di panel navigasi sebelah kiri, pilih Object Management > Objects.
-
Di halaman Objects, klik Upload Object.
-
Di panel Upload Object, konfigurasikan parameter berikut.
-
Konfigurasikan opsi dasar.
Parameter
Deskripsi
Upload To
Tentukan path penyimpanan untuk objek tersebut.
-
Current Directory: Unggah objek ke direktori saat ini.
-
Specified Directory: Unggah objek ke direktori tertentu. Anda harus memasukkan nama direktori. Jika direktori tersebut tidak ada, OSS akan secara otomatis membuat direktori tersebut dan mengunggah objek ke dalamnya.
Nama direktori harus memenuhi persyaratan berikut:
-
Panjang nama harus antara 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 access control list (ACL) untuk objek tersebut.
-
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 tersebut.
-
Public Read: Pemilik objek memiliki izin baca dan tulis pada objek tersebut. Pengguna lain, termasuk pengguna anonim, hanya memiliki izin baca pada objek tersebut. Hal ini dapat menyebabkan kebocoran data dan biaya yang tidak terduga. Harap berhati-hati.
-
Public Read/Write: Semua pengguna, termasuk pengguna anonim, dapat membaca dan menulis objek tersebut. Pengaturan ini menimbulkan risiko keamanan yang signifikan karena pengguna jahat dapat menulis konten yang tidak sah ke objek Anda. Hindari memberikan izin public read/write kecuali benar-benar diperlukan.
Untuk informasi selengkapnya tentang ACL objek, lihat 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 dinonaktifkan versioning dan objek tersebut memiliki nama yang sama dengan objek yang sudah ada, objek yang sudah ada akan ditimpa.
-
Jika Anda mengunggah objek ke bucket yang diaktifkan versioning dan objek tersebut memiliki nama yang sama dengan objek yang sudah ada, objek baru menjadi versi saat ini dan objek yang sudah ada menjadi versi sebelumnya.
-
-
Opsional: Klik ikon
di sebelah kanan Advanced Settings untuk mengonfigurasi opsi lanjutan seperti Storage Class dan Server-side Encryption.Parameter
Deskripsi
Storage Class
Tetapkan kelas penyimpanan objek tersebut. 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 zone-redundant storage (ZRS) dan locally redundant storage (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 zone-redundant storage dan locally redundant storage.
-
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. Dikenakan biaya 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 zone-redundant storage dan locally redundant storage.
-
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 tergantung pada ukuran objek dan mode pemulihan. Dikenakan biaya pengambilan data dan biaya permintaan 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 online. Kelas penyimpanan Cold Archive hanya mendukung locally redundant storage.
-
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 tergantung pada ukuran objek dan mode pemulihan. Dikenakan biaya pengambilan data dan biaya permintaan 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 tape. Kelas penyimpanan Deep Cold Archive hanya mendukung locally redundant storage.
Untuk informasi selengkapnya, lihat Storage classes.
Encryption Method
Tetapkan metode enkripsi sisi server untuk objek tersebut. 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 customer master key (CMK) default yang dikelola oleh KMS atau CMK tertentu untuk enkripsi dan dekripsi.
Untuk menggunakan enkripsi KMS, Anda harus terlebih dahulu mengaktifkan KMS. Untuk informasi selengkapnya, lihat Purchase a Dedicated KMS instance.
Berikut ini penjelasan parameter CMK:
Kunci enkripsi dalam format
<alias>(CMK ID), di mana<alias>adalah alias CMK dan CMK ID adalah ID CMK tersebut. Nilai yang valid:-
alias/acs/oss(CMK ID): CMK default yang dikelola KMS digunakan untuk menghasilkan kunci berbeda guna mengenkripsi objek berbeda. Objek tersebut secara otomatis didekripsi saat diunduh.
-
alias/<cmkname>(CMK ID): Opsi ini menggunakan CMK tertentu untuk menghasilkan kunci enkripsi unik untuk setiap objek. Metadata objek menyimpan ID CMK tersebut. Saat pengguna dengan izin yang diperlukan mengunduh objek tersebut, OSS secara otomatis mendekripsinya.
<cmkname>adalah alias opsional CMK yang Anda tentukan saat membuat CMK tersebut.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 tersebut. 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. -
-
Klik Upload Object.
Anda dapat melihat progres unggah setiap file di tab Upload Tasks pada panel Task List.
-
Gunakan SDK Alibaba Cloud
Kode berikut menunjukkan unggahan sederhana ke bucket yang diaktifkan versioning menggunakan berbagai SDK. Untuk informasi selengkapnya tentang unggahan sederhana menggunakan SDK lain, 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 menjadi 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 tersebut.
System.out.println("result.versionid: " + result.getVersionId());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + 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 menjadi 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 menjadi 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 menjadi 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 menjadi 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 menjadi 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(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Uraikan parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket kosong.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Periksa apakah wilayah kosong.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Periksa apakah nama objek kosong.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 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("failed to put object %v", err)
}
// Tampilkan ID versi objek tersebut.
log.Printf("put object result versionId:%#v\n", *result.VersionId)
}
import argparse
import requests
import alibabacloud_oss_v2 as oss
# Membuat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object sample")
# Mengonfigurasi argumen baris perintah --region untuk menentukan wilayah tempat bucket berada. Argumen ini wajib diisi.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Mengonfigurasi argumen baris perintah --bucket untuk menentukan nama bucket. Argumen ini wajib diisi.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Mengonfigurasi argumen baris perintah --endpoint untuk menentukan titik akhir yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Mengonfigurasi argumen baris perintah --key untuk menentukan nama objek. Argumen ini wajib diisi.
parser.add_argument('--key', help='Nama objek.', required=True)
def main():
args = parser.parse_args() # Mengurai argumen baris perintah.
# Mendapatkan kredensial akses dari variabel lingkungan untuk otentikasi.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Mendapatkan konfigurasi default SDK dan menentukan penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Menentukan wilayah tempat bucket berada.
cfg.region = args.region
# Jika parameter endpoint disediakan, tentukan titik akhir tersebut.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Menggunakan konfigurasi untuk membuat instans OSSClient.
client = oss.Client(cfg)
# Mengunggah file lokal.
local_file_path = '/yourLocalFilePath/yourFileName'
with open(local_file_path, 'rb') as file:
data = file.read()
# Menjalankan permintaan untuk mengunggah objek, dan menentukan nama bucket, nama objek, dan konten data.
result = client.put_object(oss.PutObjectRequest(
bucket=args.bucket,
key=args.key,
body=data,
))
# Menampilkan kode status HTTP dalam tanggapan, ID permintaan, serta hash MD5, ETag, nilai CRC-64, dan ID versi objek untuk memeriksa apakah permintaan berhasil.
print(f'kode status: {result.status_code},'
f' ID permintaan: {result.request_id},'
f' md5 konten: {result.content_md5},'
f' etag: {result.etag},'
f' hash crc64: {result.hash_crc64},'
f' ID versi: {result.version_id},'
)
if __name__ == "__main__":
main() # Titik masuk skrip. Memanggil fungsi main() ketika 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 menguraikan parameter baris perintah.
$longopts = \array_map(function ($key) {
return "$key:"; // Tambahkan 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: the following arguments are required: --$key, $help"; // Tampilkan parameter wajib yang hilang.
exit(1);
}
}
// Dapatkan nilai parameter baris perintah dan tetapkan nilai tersebut 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 tersebut.
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 unggahan 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 informasi selengkapnya tentang cara mengunggah objek ke bucket yang diaktifkan versioning menggunakan ossutil, lihat cp (upload objects).
Gunakan REST API
Jika aplikasi Anda memiliki persyaratan khusus, Anda dapat mengirim permintaan REST API secara langsung, yang mengharuskan Anda menulis kode untuk menghitung signature secara manual. Untuk informasi selengkapnya, lihat PutObject.
Cantumkan objek
Di bucket yang diaktifkan versioning, Anda dapat memanggil operasi GetBucketVersions (ListObjectVersions) untuk mengambil informasi tentang semua versi objek, termasuk delete markers.
-
Operasi GetBucket (ListObject) hanya mengembalikan versi objek saat ini yang bukan delete markers.
-
Permintaan GetBucketVersions (ListObjectVersions) tunggal dapat mengembalikan hingga 1.000 versi objek. Untuk mengambil semua versi, Anda harus mengirim beberapa permintaan.
Misalnya, jika bucket berisi dua kunci,
example.jpgdanphoto.jpg, di manaexample.jpgmemiliki 900 versi danphoto.jpgmemiliki 500 versi, permintaan tunggal mencantumkan semua 900 versiexample.jpgdan 100 versi pertamaphoto.jpg. Hasil diurutkan berdasarkan kunci dalam urutan leksikografis, lalu berdasarkan versi.
Seperti yang ditunjukkan pada gambar berikut, operasi GetBucketVersions (ListObjectVersions) mengembalikan semua versi semua objek di bucket yang diaktifkan versioning, termasuk delete markers. Sebaliknya, operasi GetBucket (ListObject) hanya mengembalikan versi saat ini yang bukan delete markers. Akibatnya, hanya objek dengan ID versi 444444 yang dikembalikan.

Konsol OSS
-
Masuk ke OSS console.
-
Klik Buckets, lalu klik nama bucket target.
Halaman ini menampilkan daftar berhalaman dari versi saat ini setiap objek. Untuk melihat semua versi, termasuk delete markers, buka halaman Objects dan klik Show di sebelah Previous Versions.
SDK OSS
Kode berikut menunjukkan cara mencantumkan objek di bucket yang diaktifkan versioning. Untuk contoh dalam bahasa lain, 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 menjadi 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 delete markers 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("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + 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 menjadi 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 delete markers.
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 wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
// Tentukan parameter --bucket untuk menunjukkan nama bucket. Parameter 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')
def main():
// Uraikan argumen baris perintah untuk mendapatkan nilai yang ditentukan.
args = parser.parse_args()
// Dari variabel lingkungan, muat informasi autentikasi 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 endpoint kustom disediakan, perbarui atribut endpoint objek cfg dengan endpoint yang disediakan.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
// Gunakan pengaturan sebelumnya untuk menginisialisasi instance OSSClient.
client = oss.Client(cfg)
// Buat objek Paginator yang digunakan untuk mencantumkan versi objek berdasarkan halaman.
paginator = client.list_object_versions_paginator()
// Iterasi berdasarkan halaman.
for page in paginator.iter_page(oss.ListObjectVersionsRequest(
bucket=args.bucket, // Nama bucket.
)
):
// Iterasi berdasarkan 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 modifikasi terakhir.
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 diaktifkan versioning, lihat ls (List resources at the account level).
RESTful API
Menggunakan RESTful API secara langsung menawarkan kustomisasi maksimum tetapi mengharuskan Anda menghitung signature permintaan secara manual. Untuk informasi selengkapnya, lihat ListObjectVersions (GetBucketVersions).
Unduh objek
Anda dapat mengunduh versi saat ini atau versi tertentu objek dari bucket yang diaktifkan versioning.
Saat Anda mengirim permintaan GET untuk mengunduh objek tanpa menentukan ID versi, OSS mengembalikan versi saat ini objek tersebut (ID=333333).

Jika versi saat ini adalah delete marker, OSS mengembalikan 404 Not Found untuk permintaan GET tersebut.

Jika Anda mengirim permintaan GET untuk mengunduh objek dan menentukan ID versi, OSS mengembalikan versi yang ditentukan (ID=222222).

Gunakan Konsol OSS
-
Masuk ke OSS console.
-
Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.
-
Di panel navigasi sebelah kiri, pilih Object Management > Objects.
-
Di halaman Objects, klik Show di sebelah kanan Previous Versions.
-
Klik versi objek yang ingin Anda unduh. Di panel yang muncul, klik Download di sebelah kanan Object URL.
Gunakan SDK OSS
Kode berikut menunjukkan cara mengunduh objek dari bucket yang diaktifkan versioning menggunakan SDK populer. Untuk informasi tentang penggunaan SDK lain, 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 menjadi 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 menjadi 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 menjadi 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
# Membuat parser parameter baris perintah
parser = argparse.ArgumentParser(description="get object sample")
# Menentukan parameter --region untuk menunjukkan wilayah tempat bucket berada. Parameter ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Menentukan parameter --bucket yang menentukan nama bucket. Parameter baris perintah ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Menentukan parameter --endpoint untuk menunjukkan titik akhir wilayah tempat bucket berada. Parameter ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Menentukan parameter --key yang menentukan nama objek. Parameter baris perintah ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)
# Menentukan 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():
# Mengurai parameter baris perintah.
args = parser.parse_args()
# Mendapatkan kredensial akses dari variabel lingkungan untuk otentikasi.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Memuat konfigurasi default SDK dan menentukan penyedia kredensial.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Menentukan wilayah tempat bucket berada.
cfg.region = args.region
# Jika parameter endpoint disediakan, tentukan titik akhir tersebut.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Menggunakan konfigurasi untuk membuat instance OSSClient.
client = oss.Client(cfg)
# Menjalankan permintaan untuk mengunduh objek, dan menentukan nama bucket dan nama objek.
result = client.get_object(oss.GetObjectRequest(
bucket=args.bucket, # Menentukan nama bucket.
key=args.key, # Menentukan nama objek.
version_id=args.version_id, # Menentukan ID versi.
))
# Menampilkan tanggapan 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},'
)
# Membaca konten objek.
content = result.body.read()
# Menyimpan 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!')
# Memanggil fungsi main ketika skrip dijalankan secara langsung.
if __name__ == "__main__":
main() # Menentukan titik masuk dalam fungsi main skrip ketika 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(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Uraikan parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket ditentukan.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Periksa apakah wilayah ditentukan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Periksa apakah nama objek ditentukan.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 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("failed to get object %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("failed to read object %v", err)
}
// Tulis konten ke file.
err = os.WriteFile(outputFile, data, 0644)
if err != nil {
log.Fatalf("failed to write to output file %v", err)
}
log.Printf("file downloaded successfully to %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 titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Uraikan 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 tersebut.
echo "Error: the following arguments are required: --$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 tersebut.
$result = $client->getObject($request);
// Tentukan path lokal untuk menyimpan objek tersebut.
$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 debug atau melacak permintaan.
);
Gunakan ossutil
Untuk mempelajari cara mengunduh objek dari bucket yang diaktifkan versioning menggunakan ossutil, lihat cp (download objects).
Gunakan REST API
Jika Anda memiliki persyaratan khusus, Anda dapat memanggil REST API secara langsung. Hal ini mengharuskan Anda menulis kode secara manual untuk menghitung signature permintaan. Untuk informasi selengkapnya, lihat GetObject.
Hapus objek
Di bucket yang diaktifkan versioning, Anda dapat menghapus objek secara permanen dengan menentukan ID versinya atau dengan mengonfigurasi aturan siklus hidup. Jika Anda menghapus objek tanpa menentukan ID versi, OSS menyisipkan delete marker yang menjadi versi saat ini objek tersebut.
-
Setelah Anda mengaktifkan versioning, menghapus objek tanpa menentukan ID versi tidak menghapus versi saat ini atau versi noncurrent secara default.
-
Jangan aktifkan OSS-HDFS dan versioning pada bucket yang sama. Kombinasi ini dapat menyebabkan pengecualian pada layanan OSS-HDFS. Untuk memastikan stabilitas layanan, nonaktifkan versioning sesegera mungkin dan konfigurasikan aturan siklus hidup untuk membersihkan delete markers.
Untuk informasi selengkapnya, lihat Cara menangani bucket yang telah mengaktifkan OSS-HDFS dan Pengendalian versi.
-
Expiration: Berlaku untuk versi saat ini objek. Saat versi saat ini objek kedaluwarsa, OSS membuat delete marker, dan versi yang kedaluwarsa menjadi versi noncurrent. -
NoncurrentVersionExpiration: Berlaku untuk versi noncurrent objek. Aksi ini menghapus versi tersebut secara permanen.
Untuk informasi selengkapnya tentang cara menggunakan versioning dengan aturan siklus hidup, lihat Lifecycle configuration elements.
Bagian ini menjelaskan perilaku operasi DELETE dengan dan tanpa ID versi yang ditentukan.
-
Jika Anda tidak menentukan ID versi, OSS menyisipkan delete marker sebagai versi saat ini. Delete marker ini memiliki ID versi unik tetapi tidak memiliki data atau ACL terkait, seperti yang ditunjukkan pada gambar berikut di mana versi saat ini adalah delete marker dengan ID versi 444444.

-
Jika Anda menentukan ID versi, OSS menghapus versi objek tersebut secara permanen, seperti yang ditunjukkan pada gambar berikut di mana versi objek dengan ID 333333 dihapus.

Konsol OSS
Untuk meminimalkan biaya penyimpanan, kami menyarankan agar Anda menghapus versi sebelumnya objek yang tidak lagi Anda perlukan sesegera mungkin.
Versi noncurrent objek tidak dapat dipulihkan setelah dihapus secara permanen. Harap berhati-hati.
-
Masuk ke OSS console.
-
Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.
-
Di panel navigasi sebelah kiri, pilih Object Management > Objects.
-
Di halaman Objects, klik Show di sebelah Previous Versions.
-
Temukan versi noncurrent yang tidak diperlukan dan lakukan salah satu hal berikut:
-
Untuk menghapus delete marker, klik Permanently Delete di kolom Actions.
-
Untuk menghapus versi objek, arahkan pointer ke ikon
di kolom Actions dan klik Permanently Delete.
Anda juga dapat memilih beberapa versi noncurrent dan klik Permanently Delete di bagian bawah halaman.
-
-
Klik OK.
Atau, Anda dapat mengonfigurasi aturan siklus hidup untuk menghapus versi objek noncurrent secara berkala. Untuk informasi selengkapnya, lihat Overview of lifecycle rules.
SDK OSS
Kode berikut memberikan contoh cara menghapus versi tertentu objek dari bucket yang diaktifkan versioning menggunakan SDK OSS. Untuk informasi tentang cara menggunakan SDK lain, 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 menjadi 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("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + 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 menjadi 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 tersebut.
const versionId = "versionId";
// Tentukan objek tersebut.
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 menjadi 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 delete marker.
var versionid = "yourObjectVersionidOrDelMarkerVersionid";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan ubah parameter default berdasarkan 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 delete marker yang ingin Anda hapus.
var request = new DeleteObjectRequest(bucketName, objectName)
{
VersionId = versionid
};
client.DeleteObject(request);
Console.WriteLine("Delete object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Delete 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 menjadi 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 menjadi 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 delete marker 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 delete marker ditentukan, delete_marker yang dikembalikan adalah True dan versionId yang dikembalikan adalah versionId delete marker yang ditentukan. */
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "DeleteObject 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"
"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(®ion, "region", "", "Wilayah tempat bucket berada.")
flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
flag.StringVar(&objectName, "object", "", "Nama objek.")
}
func main() {
// Uraikan flag baris perintah.
flag.Parse()
// Periksa apakah nama bucket disediakan.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, bucket name required")
}
// Periksa apakah wilayah disediakan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// Periksa apakah nama objek disediakan.
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
// 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 ID versi aktual objek.
}
// Jalankan operasi penghapusan dan tangani hasilnya.
result, err := client.DeleteObject(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete object %v", err)
}
// Cetak hasilnya.
log.Printf("delete object result:%#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 titik dua (:) setelah setiap argumen untuk menunjukkan bahwa argumen memerlukan nilai.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Uraikan 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: the following arguments are required: --$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 tersebut.
}
// 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 debug atau melacak permintaan.
);
ossutil
Untuk informasi selengkapnya tentang cara menghapus objek dari bucket yang diaktifkan versioning menggunakan ossutil, lihat rm (delete).
REST API
Untuk persyaratan khusus, Anda dapat mengirim permintaan REST API secara langsung. Hal ini mengharuskan Anda menghitung signature permintaan secara manual. Untuk informasi selengkapnya, lihat DeleteObject.
Pulihkan objek
Saat versioning diaktifkan untuk bucket, OSS menyimpan semua versi objek di bucket tersebut. Anda dapat memulihkan versi sebelumnya objek tertentu, yang kemudian menjadi versi saat ini.
Anda dapat memulihkan versi sebelumnya objek dengan salah satu dari dua cara berikut:
-
Salin versi sebelumnya objek tersebut
Objek yang disalin menjadi versi saat ini, dan semua versi objek tetap disimpan.
Seperti yang ditunjukkan pada gambar, saat Anda menyalin versi sebelumnya objek (ID versi 222222) ke bucket yang sama, OSS membuat versi baru dengan ID baru (ID versi 444444) dan menjadikannya versi saat ini. Versi sebelumnya (ID versi 222222) juga tetap disimpan.

-
Hapus secara permanen versi saat ini objek tersebut
Seperti yang ditunjukkan pada gambar berikut, saat Anda menghapus secara permanen versi saat ini objek (ID versi 222222) dengan menentukan ID versinya dalam permintaan DELETE, versi yang paling baru sebelumnya (ID 111111) menjadi versi saat ini.

Karena versi yang dihapus secara permanen tidak dapat dipulihkan, kami menyarankan memulihkan versi sebelumnya dengan menyalinnya.
Gunakan Konsol OSS
-
Masuk ke OSS console.
-
Di panel navigasi sebelah kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.
-
Di panel navigasi sebelah kiri, pilih Object Management > Objects.
-
Di halaman Objects, klik Show di sebelah kanan Previous Versions.
-
Pulihkan versi sebelumnya objek tersebut.
PentingAnda hanya dapat memulihkan satu versi objek dalam satu waktu. Delete marker 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
Contoh kode berikut menunjukkan cara menggunakan SDK OSS umum untuk menyalin versi tertentu objek di bucket yang diaktifkan versioning. Untuk informasi tentang SDK lain, 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 menjadi 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("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + 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 menjadi 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 menjadi 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 menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan ubah parameter default berdasarkan 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 bukan null, mode REPLACE digunakan dan metadata objek sumber menimpa metadata objek tujuan.
NewObjectMetadata = metadata,
// Tentukan ID versi objek.
SourceVersionId = versionid
};
// Salin objek tersebut.
var result = client.CopyObject(req);
Console.WriteLine("Copy object succeeded, vesionid:{0}", result.VersionId);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2} \tHostID: {3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {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 menjadi 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 menjadi 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 yang ditentukan. */
auto outcome = client.CopyObject(request);
if (outcome.isSuccess()) {
std::cout << "versionid:" << outcome.result().VersionId() << std::endl;
}
else {
/* Tangani pengecualian. */
std::cout << "CopyObject 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"
"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(®ion, "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() {
// Uraikan parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket sumber ditentukan.
if len(srcBucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, source bucket name required")
}
// Periksa apakah wilayah ditentukan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, region required")
}
// 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("invalid parameters, source object name required")
}
// Periksa apakah nama objek tujuan ditentukan.
if len(destObjectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, destination object name required")
}
// 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("failed to copy object: %v", err)
}
// Tampilkan hasilnya.
log.Printf("copy object result 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 titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
$longopts = \array_map(function ($key) {
return "$key:";
}, array_keys($optsdesc));
// Uraikan 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 tersebut.
echo "Error: the following arguments are required: --$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 debug atau melacak permintaan.
);
import argparse
import alibabacloud_oss_v2 as oss
# Membuat parser argumen baris perintah dan menjelaskan tujuan skrip: menyalin objek dalam bucket.
parser = argparse.ArgumentParser(description="copy object sample")
# Menentukan 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():
# Mengurai argumen baris perintah untuk mendapatkan nilai yang dimasukkan pengguna.
args = parser.parse_args()
# Memuat informasi kredensial akses dari variabel lingkungan untuk verifikasi identitas.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Menggunakan konfigurasi SDK default untuk membuat objek konfigurasi dan mengatur penyedia otentikasi.
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
# Mengatur properti wilayah objek konfigurasi berdasarkan argumen baris perintah.
cfg.region = args.region
# Jika titik akhir kustom disediakan, perbarui properti titik akhir dalam objek konfigurasi.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Menggunakan konfigurasi sebelumnya untuk menginisialisasi klien OSS dan mempersiapkan interaksi dengan OSS.
client = oss.Client(cfg)
# Mengirim 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.
))
# Mencetak 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 main untuk memulai logika pemrosesan.
if __name__ == "__main__":
main() # Titik masuk skrip. Alur program dimulai di sini.Gunakan ossutil
Untuk memulihkan versi objek sebelumnya menggunakan ossutil, lihat revert (restore versions).
Gunakan RESTful API
Jika aplikasi Anda memiliki persyaratan khusus, Anda dapat mengirim permintaan RESTful API secara langsung. Hal ini mengharuskan Anda menulis kode secara manual untuk menghitung signature permintaan. Untuk informasi selengkapnya, lihat CopyObject.