Object Storage Service (OSS) mendukung penandaan objek untuk mengklasifikasikan objek dalam bucket. Anda dapat menetapkan aturan siklus hidup dan izin akses untuk objek yang memiliki tag yang sama.
Aturan Penandaan
Tag objek adalah pasangan kunci-nilai yang dapat digunakan untuk menandai objek. Anda dapat menambahkan tag saat mengunggah objek atau ke objek yang sudah ada.
Anda dapat menambahkan maksimal 10 tag ke sebuah objek. Kunci dari setiap tag harus unik.
Sebuah kunci dapat mencapai panjang hingga 128 karakter, sedangkan nilai dapat mencapai panjang hingga 256 karakter.
Kunci dan nilai bersifat peka terhadap huruf besar/kecil.
Tag dapat berisi huruf, angka, spasi, serta karakter khusus berikut: +‑=._:/.
Saat menetapkan tag menggunakan Header HTTP, Anda harus melakukan pengkodean URL pada kunci dan nilai tag.
Catatan
Hanya pemilik bucket dan Pengguna Resource Access Management (RAM) yang diberi izin oss:PutObjectTagging yang dapat membaca dan menulis tag objek.
Anda dapat menambahkan tag ke objek selama unggah sederhana, unggah multi-bagian, unggah tambahan, atau operasi salin. Anda juga dapat menambahkan tag ke objek yang sudah ada.
Setelah menambahkan tag ke objek, OSS akan membebankan biaya berdasarkan jumlah tag per jam. Untuk informasi lebih lanjut, lihat Biaya Penandaan Objek.
Mengubah tag suatu objek tidak akan memperbarui waktu Last-Modified dari objek tersebut.
Selama replikasi lintas wilayah, tag dari objek sumber juga disalin ke bucket tujuan.
Skenario
Gunakan tag objek dengan aturan siklus hidup
Untuk objek yang dihasilkan secara berkala dan tidak memerlukan penyimpanan jangka panjang, Anda dapat menambahkan tag saat mengunggahnya. Kemudian, gunakan aturan siklus hidup untuk menghapus objek ini secara berkala guna menghemat biaya penyimpanan. Sebagai contoh, Anda dapat mengonfigurasi aturan siklus hidup untuk menghapus objek yang memiliki awalan `dir1` dan tag `key1:value1` 30 hari setelah terakhir dimodifikasi. Contoh kode berikut memberikan konfigurasi contoh:
Otorisasi Pengguna RAM untuk mengakses objek yang memiliki tag tertentu
Sebagai contoh, Anda dapat mengonfigurasi kebijakan RAM berikut untuk memberikan otorisasi kepada Pengguna RAM mengakses objek yang memiliki tag `key2:value2`.
Anda juga dapat memberikan izin lain kepada pengguna (`Action`), seperti izin untuk menulis data ke objek yang memiliki tag tertentu dan melihat informasi objek. Untuk informasi lebih lanjut tentang tindakan yang didukung oleh kebijakan RAM, lihat Kebijakan RAM.
Di panel navigasi sebelah kiri, klik Buckets. Pada halaman Buckets, temukan dan klik bucket yang diinginkan.
Di pohon navigasi sebelah kiri, pilih Object Management > Objects.
Tambahkan tag ke objek.
Pilih objek yang ingin Anda tambahkan tag.
Jika pengendalian versi dinonaktifkan untuk bucket
Di kolom Tindakan untuk objek, pilih > Tag.
Jika pengendalian versi diaktifkan untuk bucket
Di kolom Tindakan untuk versi objek, pilih > Tag.
Di panel Tag, tentukan Key dan Value untuk tag sesuai aturan penandaan.
Klik OK.
Gunakan SDK Alibaba Cloud
Kode berikut memberikan contoh cara menetapkan tag objek selama unggah sederhana menggunakan kit pengembangan perangkat lunak (SDK). Untuk informasi lebih lanjut tentang cara menetapkan tag objek selama unggah sederhana, unggah multi-bagian, unggah tambahan, dan operasi salin menggunakan SDK lainnya, lihat Ikhtisar SDK.
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
import java.util.Map;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.common.comm.SignVersion;
public class Demo {
public static void main(String[] args) throws Exception {
// Dalam contoh ini, endpoint dari wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh ini, 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 jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// 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.
// Saat instance OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
Map<String, String> tags = new HashMap<String, String>();
// Tentukan kunci dan nilai dari tag objek. Misalnya, atur kunci menjadi owner dan nilai menjadi John.
tags.put("owner", "John");
tags.put("type", "document");
// Tetapkan informasi tag dalam header HTTP.
ObjectMetadata metadata = new ObjectMetadata();
metadata.setObjectTagging(tags);
// Tetapkan informasi tag saat Anda mengunggah file.
String content = "<yourtContent>";
ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), metadata);
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, "
+ "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
const OSS = require('ali-oss')
const client = new OSS({
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
region: 'yourregion',
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// Tentukan nama bucket.
bucket: 'yourbucketname'
});
// Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
const objectName = 'exampledir/exampleobject.txt'
// Tentukan jalur lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt.
// Secara default, jika Anda hanya menentukan nama file lokal seperti examplefile.txt tanpa menentukan jalur lokal, file lokal diunggah dari jalur proyek tempat program contoh milik.
const localFilepath = 'D:\\localpath\\examplefile.txt'
// Konfigurasikan header permintaan.
const headers = {
// Tentukan kunci dan nilai dari tag objek. Misalnya, atur kunci menjadi owner dan nilai menjadi John.
'x-oss-tagging': 'owner=John&type=document',
}
client.put(objectName, localFilepath, {
headers
})
using System.Text;
using Aliyun.OSS;
using System.Text;
using Aliyun.OSS.Util;
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.
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap.
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";
String UrlEncodeKey(String key)
{
const string CharsetName = "utf-8";
const char separator = '/';
var segments = key.Split(separator);
var encodedKey = new StringBuilder();
encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName));
for (var i = 1; i < segments.Length; i++)
encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName));
if (key.EndsWith(separator.ToString()))
{
// String#split mengabaikan garis miring ekor kosong, misalnya, "a/b/" akan dipisah sebagai array 2 entri,
// jadi kita harus menambahkan semua garis miring ekor ke uri.
foreach (var ch in key)
{
if (ch == separator)
encodedKey.Append(separator);
else
break;
}
}
return encodedKey.ToString();
}
// 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 modifikasi parameter default berdasarkan kebutuhan Anda.
var conf = new ClientConfiguration();
// Gunakan algoritma tanda tangan V4.
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);
var meta = new ObjectMetadata();
// Konfigurasikan tag dalam header HTTP.
string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2");
meta.AddHeader("x-oss-tagging", str);
var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
putRequest.Metadata = meta;
// Unggah objek dan tambahkan tag ke objek.
client.PutObject(putRequest);
Console.WriteLine("Unggah objek berhasil");
}
catch (Exception ex)
{
Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan 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";
/* Tentukan 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 jalur lengkap objek. Jangan masukkan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya, seperti 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);
/* Tentukan tag. */
Tagging tagging;
tagging.addTag(Tag("key1", "value1"));
tagging.addTag(Tag("key2", "value2"));
request.setTagging(tagging.toQueryParameters());
/* Unggah objek. */
auto outcome = client.PutObject(request);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "PutObject gagal" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya, seperti 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.
)
// 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() {
// Parsing parameter baris perintah.
flag.Parse()
// Periksa apakah nama bucket telah ditentukan.
if len(bucketName) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, nama bucket diperlukan")
}
// Periksa apakah wilayah telah ditentukan.
if len(region) == 0 {
flag.PrintDefaults()
log.Fatalf("parameter tidak valid, wilayah diperlukan")
}
// Periksa apakah nama objek telah ditentukan.
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 untuk diunggah.
Tagging: oss.Ptr("tag1=value1&tag2=value2"), // Tentukan tag objek.
}
// Eksekusi permintaan.
result, err := client.PutObject(context.TODO(), request)
if err != nil {
log.Fatalf("gagal mengunggah objek %v", err)
}
// Tampilkan hasil.
log.Printf("hasil unggah objek:%#v\n", result)
}
<?php
// Masukkan file autoload untuk memuat pustaka 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], // (Diperlukan) 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], // (Diperlukan) Tentukan nama bucket.
"key" => ['help' => Nama objek, 'required' => True], // (Diperlukan) Tentukan nama objek.
];
// Ubah deskripsi parameter menjadi daftar opsi panjang yang diperlukan oleh getopt.
$longopts = \array_map(function ($key) {
return "$key:"; // Tambahkan titik dua (:) di akhir setiap parameter untuk menunjukkan bahwa nilai diperlukan.
}, array_keys($optsdesc));
// Parsing parameter baris perintah.
$options = getopt("", $longopts);
// Periksa apakah parameter yang diperlukan telah 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 yang diperlukan tidak dikonfigurasi, keluar dari program.
}
}
// Dapatkan nilai dari parameter yang telah diuraikan.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"]; // Nama objek.
// Dapatkan kredensial akses dari variabel lingkungan.
// Dapatkan AccessKey ID dan AccessKey secret dari penyedia EnvironmentVariableCredentialsProvider 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 endpoint disediakan.
}
// Buat instance OSSClient.
$client = new Oss\Client($cfg);
// Tentukan konten yang ingin Anda unggah.
$data = 'Hello OSS';
// Buat objek PutObjectRequest untuk mengunggah objek.
$request = new Oss\Models\PutObjectRequest(
bucket: $bucket,
key: $key,
tagging: "key1=value1&key2=value2"); // Tentukan informasi tag.
$request-> body=Oss\Utils::streamFor($data); // Tentukan bahwa data dalam badan permintaan HTTP adalah aliran biner.
// Lakukan operasi unggah sederhana.
$result = $client->putObject($request);
// Tampilkan hasil unggah.
printf(
'status code: %s' . PHP_EOL . // Kode status HTTP.
'request id: %s' . PHP_EOL . // ID permintaan.
'etag: %s' . PHP_EOL, // ETag objek.
$result->statusCode,
$result->requestId,
$result->etag
);
import argparse
import alibabacloud_oss_v2 as oss
# Buat parser parameter baris perintah dan definisikan parameter.
parser = argparse.ArgumentParser(description="contoh penandaan objek")
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--key', help='Nama objek.', required=True)
parser.add_argument('--tag_key', help='Nama kunci tag.', required=True)
parser.add_argument('--tag_value', help='Nama nilai tag.', required=True)
def main():
# Parsing parameter baris perintah.
args = parser.parse_args()
# Muat kredensial akses dari variabel lingkungan.
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
# Gunakan konfigurasi default SDK.
cfg = oss.config.load_default()
# Tentukan penyedia kredensial.
cfg.credentials_provider = credentials_provider
# Tentukan wilayah.
cfg.region = args.region
# Tentukan endpoint jika disediakan.
if args.endpoint is not None:
cfg.endpoint = args.endpoint
# Buat klien OSS.
client = oss.Client(cfg)
# Tentukan tag.
# Tambahkan lebih banyak objek oss.Tag dalam format berikut jika Anda perlu mengonfigurasi beberapa tag.
# tags = [oss.Tag(key=args.tag_key, value=args.tag_value), oss.Tag(key=args.tag_key2, value=args.tag_value2)]
tags = [oss.Tag(
key=args.tag_key,
value=args.tag_value,
)]
# Konfigurasikan tag untuk objek.
result = client.put_object_tagging(oss.PutObjectTaggingRequest(
bucket=args.bucket,
key=args.key,
tagging=oss.Tagging(
tag_set=oss.TagSet(
tags=tags,
),
),
))
# Cetak respons.
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' version id: {result.version_id},'
)
if __name__ == "__main__":
main()
Gunakan alat baris perintah ossutil
Anda dapat menggunakan alat baris perintah ossutil untuk menambahkan atau memodifikasi tag. Untuk informasi lebih lanjut tentang cara menginstal ossutil, lihat Instal ossutil.
Perintah berikut menambahkan atau memodifikasi tag untuk objek exampleobject dalam bucket examplebucket.
ossutil api put-object-tagging --bucket examplebucket --key exampleobject --tagging "{\"TagSet\":{\"Tag\":[{\"Key\":\"key1\",\"Value\":\"value1\"},{\"Key\":\"key2\",\"Value\":\"value2\"}]}}"
Untuk informasi lebih lanjut tentang perintah ini, lihat put-object-tagging.
Operasi API Terkait
Metode yang dijelaskan dalam topik ini didasarkan pada operasi API. Jika aplikasi Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat membuat permintaan REST API secara langsung. Saat membuat permintaan REST API, Anda harus menulis kode secara manual untuk menghitung tanda tangan. Untuk informasi lebih lanjut, lihat PutObjectTagging.