OSS mendukung object tagging untuk mengklasifikasikan objek dalam bucket. Anda dapat menetapkan aturan lifecycle dan izin akses untuk objek yang memiliki tag yang sama.
Catatan
Sebelum mengonfigurasi tag objek, pastikan Anda memahami fitur ini. Untuk informasi selengkapnya, lihat Object tagging.
Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Regions and endpoints.
Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Configuration examples for common scenarios.
Object tagging hanya didukung di Java SDK versi 3.5.0 ke atas.
Untuk menyetel tag objek, Anda harus memiliki izin
oss:PutObjectTagging. Untuk informasi selengkapnya, lihat Grant custom access policies to RAM users.
Tambahkan tag objek saat mengunggah objek
Kode berikut memberikan contoh cara menambahkan tag objek ke suatu objek selama unggah simple, unggah multi-bagian, unggah append, dan unggah yang dapat dilanjutkan.
Tambahkan tag objek selama unggah simple
Kode berikut menunjukkan contoh penambahan tag objek selama unggah simple.
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 { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. String objectName = "exampledir/exampleobject.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas 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 untuk tag objek. Contoh: owner dan John. tags.put("owner", "John"); tags.put("type", "document"); // Setel informasi tag dalam Header HTTP. ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging(tags); // Setel informasi tag saat Anda mengunggah file. String content = "<yourtContent>"; ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), metadata); } 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(); } } } }Tambahkan tag objek selama unggah multi-bagian
Kode berikut menunjukkan cara menambahkan tag objek selama unggah multi-bagian.
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.*; import java.util.*; public class Demo { public static void main(String[] args) throws Exception { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. String objectName = "exampledir/exampleobject.txt"; // Tentukan path lengkap file lokal. Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal yang sesuai dengan proyek tempat program contoh berada. String localFile = "D:\\localpath\\examplefile.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { /* Langkah 1: Inisialisasi event unggah multi-bagian. */ // Setel informasi tag dalam Header HTTP. Map<String, String> tags = new HashMap<String, String>(); // Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan John. tags.put("owner", "John"); tags.put("type", "document"); ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging(tags); // Setel informasi tag saat Anda mengirim permintaan InitiateMultipartUploadRequest. InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName, metadata); InitiateMultipartUploadResult result = ossClient.initiateMultipartUpload(request); // Upload ID dikembalikan, yang secara unik mengidentifikasi event unggah multi-bagian. Anda dapat menggunakan ID ini untuk melakukan operasi seperti membatalkan unggah multi-bagian dan menanyakan unggah multi-bagian. String uploadId = result.getUploadId(); /* Langkah 2: Unggah bagian-bagian. */ // partETags adalah kumpulan objek PartETag. PartETag terdiri dari ETag dan nomor bagian suatu bagian. List<PartETag> partETags = new ArrayList<PartETag>(); // Hitung jumlah bagian. final long partSize = 1 * 1024 * 1024L; // 1 MB. final File sampleFile = new File(localFile); long fileLength = sampleFile.length(); int partCount = (int) (fileLength / partSize); if (fileLength % partSize != 0) { partCount++; } // Iterasi melalui bagian-bagian dan unggah. for (int i = 0; i < partCount; i++) { long startPos = i * partSize; long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; InputStream instream = null; try { instream = new FileInputStream(sampleFile); // Lewati bagian yang sudah diunggah. instream.skip(startPos); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } UploadPartRequest uploadPartRequest = new UploadPartRequest(); uploadPartRequest.setBucketName(bucketName); uploadPartRequest.setKey(objectName); uploadPartRequest.setUploadId(uploadId); uploadPartRequest.setInputStream(instream); // Setel ukuran bagian. Ukuran minimum suatu bagian adalah 100 KB, kecuali bagian terakhir. uploadPartRequest.setPartSize(curPartSize); // Setel nomor bagian. Setiap bagian yang diunggah memiliki nomor bagian yang berkisar antara 1 hingga 10.000. Jika nomor bagian tidak dalam rentang yang valid, OSS mengembalikan error InvalidArgument. uploadPartRequest.setPartNumber( i + 1); // Bagian dapat diunggah dalam urutan apa pun dan dari klien yang berbeda. OSS menggabungkan bagian-bagian tersebut menjadi objek lengkap berdasarkan nomor bagiannya. UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); // Setelah setiap bagian diunggah, respons dari OSS berisi PartETag. PartETag disimpan ke partETags. partETags.add(uploadPartResult.getPartETag()); } /* Langkah 3: Selesaikan unggah multi-bagian. */ // partETags harus diurutkan secara ascending berdasarkan nomor bagian. Collections.sort(partETags, new Comparator<PartETag>() { public int compare(PartETag p1, PartETag p2) { return p1.getPartNumber() - p2.getPartNumber(); } }); // Saat melakukan operasi ini, Anda harus menyediakan semua partETags yang valid. Setelah OSS menerima partETags yang dikirimkan, OSS memverifikasi validitas setiap bagian. Setelah semua bagian diverifikasi, OSS menggabungkannya menjadi objek lengkap. CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags); ossClient.completeMultipartUpload(completeMultipartUploadRequest); // Lihat informasi tag objek. TagSet tagSet = ossClient.getObjectTagging(bucketName, objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: "+ getTags.toString()); } 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(); } } } }Tambahkan tag objek selama unggah append
Kode berikut menunjukkan cara menambahkan tag objek selama unggah append.
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.*; import java.util.*; public class Demo { public static void main(String[] args) throws Exception { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. String objectName = "exampledir/exampleobject.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { String content1 = "Hello OSS A \n"; String content2 = "Hello OSS B \n"; String content3 = "Hello OSS C \n"; Map<String, String> tags = new HashMap<String, String>(); // Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan John. tags.put("owner", "John"); tags.put("type", "document"); ObjectMetadata meta = new ObjectMetadata(); // Setel tag untuk objek yang diunggah. meta.setObjectTagging(tags); // Tentukan tipe konten objek yang diunggah. meta.setContentType("text/plain"); // Setel beberapa parameter menggunakan AppendObjectRequest. AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucketName, objectName, new ByteArrayInputStream(content1.getBytes()), meta); // Setel satu parameter menggunakan AppendObjectRequest. //appendObjectRequest.setBucketName(bucketName); //appendObjectRequest.setKey(objectName); // Setel konten yang akan ditambahkan. Konten dapat bertipe InputStream atau File. Pada contoh ini, konten bertipe InputStream. //appendObjectRequest.setInputStream(new ByteArrayInputStream(content1.getBytes())); // Setel konten yang akan ditambahkan. Konten dapat bertipe InputStream atau File. Pada contoh ini, konten bertipe File. // Tentukan path lengkap file lokal. Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal yang sesuai dengan proyek tempat program contoh berada. //appendObjectRequest.setFile(new File("D:\\localpath\\examplefile.txt")); // Tentukan metadata objek. Metadata hanya berlaku untuk operasi append pertama. //appendObjectRequest.setMetadata(meta); // Operasi append pertama. Tag yang Anda setel hanya berlaku untuk unggah append pertama. // Setel posisi mulai menambahkan data. appendObjectRequest.setPosition(0L); AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest); // Nilai CRC 64-bit objek. System.out.println(appendObjectResult.getObjectCRC()); // Operasi append kedua. // nextPosition menunjukkan posisi yang harus disediakan pada permintaan berikutnya, yaitu panjang objek saat ini. appendObjectRequest.setPosition(appendObjectResult.getNextPosition()); appendObjectRequest.setInputStream(new ByteArrayInputStream(content2.getBytes())); appendObjectResult = ossClient.appendObject(appendObjectRequest); // Operasi append ketiga. appendObjectRequest.setPosition(appendObjectResult.getNextPosition()); appendObjectRequest.setInputStream(new ByteArrayInputStream(content3.getBytes())); appendObjectResult = ossClient.appendObject(appendObjectRequest); // Lihat informasi tag objek yang diunggah. TagSet tagSet = ossClient.getObjectTagging(bucketName, objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: "+ getTags.toString()); } 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(); } } } }Tambahkan tag objek selama unggah yang dapat dilanjutkan
Kode berikut menunjukkan cara menambahkan tag objek selama unggah yang dapat dilanjutkan.
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.util.*; public class Demo { public static void main(String[] args) throws Throwable { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. String objectName = "exampledir/exampleobject.txt"; // Tentukan path lengkap file lokal. Jika Anda tidak menentukan path lokal, file akan diunggah dari path lokal yang sesuai dengan proyek tempat program contoh berada. String localFile = "D:\\localpath\\examplefile.txt"; // File yang mencatat hasil unggah multi-bagian lokal. File harus memiliki ekstensi .ucp dan berada di direktori yang sama dengan file lokal yang ditentukan oleh localFile. // Setelah unggah selesai, file ini dihapus. String yourCheckpointFile = "D:\\localpath\\uploadfile.ucp"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Setel informasi tag untuk objek. Map<String, String> tags = new HashMap<String, String>(); // Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan John. tags.put("owner", "John"); tags.put("type", "document"); ObjectMetadata meta = new ObjectMetadata(); // Tentukan tipe konten objek yang diunggah. meta.setContentType("text/plain"); // Setel tag objek. meta.setObjectTagging(tags); // Setel beberapa parameter menggunakan UploadFileRequest. UploadFileRequest uploadFileRequest = new UploadFileRequest(bucketName,objectName); // Setel satu parameter menggunakan UploadFileRequest. // Tentukan nama bucket. //uploadFileRequest.setBucketName(bucketName); // Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. //uploadFileRequest.setKey(objectName); // Tentukan file lokal yang akan diunggah. uploadFileRequest.setUploadFile(localFile); // Tentukan jumlah thread konkuren untuk unggah. Nilai default adalah 1. uploadFileRequest.setTaskNum(5); // Tentukan ukuran setiap bagian. Nilainya harus dalam rentang 100 KB hingga 5 GB. Ukuran bagian default adalah 1/10.000 dari total ukuran objek. uploadFileRequest.setPartSize(1 * 1024 * 1024); // Aktifkan unggah yang dapat dilanjutkan. Secara default, fitur ini dinonaktifkan. uploadFileRequest.setEnableCheckpoint(true); // File yang mencatat hasil unggah multi-bagian lokal. Anda harus menyetel parameter ini saat mengaktifkan unggah yang dapat dilanjutkan. Progres unggah disimpan ke file ini. Jika suatu bagian gagal diunggah, unggah dilanjutkan dari breakpoint yang dicatat saat Anda mengunggah bagian tersebut lagi. Setelah unggah selesai, file ini dihapus. Secara default, file berada di direktori yang sama dengan file lokal yang akan diunggah dan diberi nama uploadFile.ucp. uploadFileRequest.setCheckpointFile(yourCheckpointFile); // Metadata objek. uploadFileRequest.setObjectMetadata(meta); // Setel callback untuk unggah yang berhasil. Parameter bertipe Callback. //uploadFileRequest.setCallback("yourCallbackEvent"); // Lakukan unggah yang dapat dilanjutkan dan setel tag objek. ossClient.uploadFile(uploadFileRequest); // Lihat informasi tag objek. TagSet tagSet = ossClient.getObjectTagging(bucketName, objectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("object tagging: "+ getTags.toString()); } 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(); } } } }
Tambahkan atau ubah tag objek untuk objek yang sudah ada
Jika Anda tidak menambahkan tag objek saat mengunggah objek, atau tag yang ada tidak memenuhi kebutuhan Anda, Anda dapat menambahkan atau mengubah tag objek tersebut setelah objek diunggah.
Kode berikut menunjukkan cara menambahkan atau mengubah tag objek untuk objek yang sudah ada.
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 java.util.*;
public class Demo {
public static void main(String[] args) throws Throwable {
// Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas 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 untuk tag objek. Contoh: owner dan John.
tags.put("owner", "John");
tags.put("type", "document");
// Setel tag untuk objek.
ossClient.setObjectTagging(bucketName, objectName, tags);
} 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();
}
}
}
}Tambahkan atau ubah tag objek untuk versi tertentu dari objek
Dalam bucket yang diaktifkan Pengendalian versi, Anda dapat menambahkan atau mengubah tag objek untuk versi tertentu dari objek dengan menentukan ID versinya.
Kode berikut menunjukkan cara menambahkan atau mengubah tag objek untuk versi tertentu dari objek.
Untuk informasi selengkapnya tentang cara memperoleh ID versi, lihat List objects (Java SDK V1).
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.SetObjectTaggingRequest;
import java.util.*;
public class Demo {
public static void main(String[] args) throws Throwable {
// Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh 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. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// Tentukan ID versi objek. Contoh: CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****.
String versionId = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas 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>(1);
// Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan John.
tags.put("owner", "John");
tags.put("type", "document");
SetObjectTaggingRequest setObjectTaggingRequest = new SetObjectTaggingRequest(bucketName, objectName, tags);
setObjectTaggingRequest.setVersionId(versionId);
ossClient.setObjectTagging(setObjectTaggingRequest);
} 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();
}
}
}
}Setel tag objek saat menyalin objek
Saat menyalin objek, Anda dapat menentukan cara menyetel tag untuk objek tujuan. Nilai yang valid adalah:
Copy (default): Menyalin tag dari objek sumber ke objek tujuan.
Replace: Mengabaikan tag objek sumber dan menerapkan tag yang ditentukan dalam permintaan ke objek tujuan.
Kode berikut memberikan contoh cara menyetel tag objek saat menyalin objek menggunakan operasi salin simple untuk objek berukuran kurang dari 1 GB dan operasi salin multi-bagian untuk objek berukuran 1 GB atau lebih besar.
Setel tag objek selama salin simple
Kode berikut memberikan contoh cara menyetel tag objek saat menyalin objek berukuran kurang dari 1 GB.
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.internal.OSSHeaders; import com.aliyun.oss.model.CopyObjectRequest; import com.aliyun.oss.model.CopyObjectResult; import com.aliyun.oss.model.TagSet; import java.util.*; public class Demo { public static void main(String[] args) throws Throwable { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Contoh: srcexamplebucket. String sourceBucketName = "srcexamplebucket"; // Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket. Contoh: srcexampledir/exampleobject.txt. String sourceObjectName = "srcexampledir/exampleobject.txt"; // Tentukan nama bucket tujuan. Contoh: destexamplebucket. String destinationBucketName = "destexamplebucket"; // Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Contoh: destexampledir/exampleobject.txt. String destinationObjectName = "destexampledir/exampleobject.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Buat objek CopyObjectRequest. CopyObjectRequest copyObjectRequest = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName); // Setel tag untuk objek tujuan. Jika Anda tidak menyetel header, tag objek sumber akan disalin ke objek tujuan secara default. Map<String, String> headers = new HashMap<String, String>(); headers.put(OSSHeaders.COPY_OBJECT_TAGGING_DIRECTIVE, "REPLACE"); headers.put(OSSHeaders.OSS_TAGGING, "key1=value1&key2=value2"); copyObjectRequest.setHeaders(headers); // Salin objek. CopyObjectResult result = ossClient.copyObject(copyObjectRequest); System.out.println("ETag: " + result.getETag() + " LastModified: " + result.getLastModified()); // Lihat informasi tag objek tujuan. TagSet tagSet = ossClient.getObjectTagging(destinationBucketName, destinationObjectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("dest object tagging: "+ getTags.toString()); } 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(); } } } }Setel tag objek selama salin multi-bagian
Kode berikut memberikan contoh cara menyetel tag objek saat menyalin objek berukuran 1 GB atau lebih besar.
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.util.*; public class Demo { public static void main(String[] args) throws Throwable { // Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Peroleh 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. Contoh: srcexamplebucket. String sourceBucketName = "srcexamplebucket"; // Tentukan path lengkap objek sumber. Path lengkap tidak boleh mengandung nama bucket. Contoh: srcexampledir/exampleobject.txt. String sourceObjectName = "srcexampledir/exampleobject.txt"; // Tentukan nama bucket tujuan. Contoh: destexamplebucket. String destinationBucketName = "destexamplebucket"; // Tentukan path lengkap objek tujuan. Path lengkap tidak boleh mengandung nama bucket. Contoh: destexampledir/exampleobject.txt. String destinationObjectName = "destexampledir/exampleobject.txt"; // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou. String region = "cn-hangzhou"; // Buat instans OSSClient. // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya. ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { ObjectMetadata objectMetadata = ossClient.getObjectMetadata(sourceBucketName, sourceObjectName); // Peroleh ukuran objek yang akan disalin. long contentLength = objectMetadata.getContentLength(); // Setel ukuran bagian menjadi 10 MB. long partSize = 1024 * 1024 * 10; // Hitung jumlah total bagian. int partCount = (int) (contentLength / partSize); if (contentLength % partSize != 0) { partCount++; } System.out.println("total part count:" + partCount); // Setel informasi tag dalam Header HTTP. Map<String, String> tags2 = new HashMap<String, String>(); // Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan Lily. tags2.put("owner", "Lily"); tags2.put("type", "document"); ObjectMetadata metadata = new ObjectMetadata(); metadata.setObjectTagging(tags2); // Inisialisasi tugas salin. Sekaligus, setel tag untuk objek tujuan. InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(destinationBucketName, destinationObjectName, metadata); InitiateMultipartUploadResult initiateMultipartUploadResult = ossClient.initiateMultipartUpload(initiateMultipartUploadRequest); String uploadId = initiateMultipartUploadResult.getUploadId(); // Salin bagian-bagian. List<PartETag> partETags = new ArrayList<PartETag>(); for (int i = 0; i < partCount; i++) { // Hitung ukuran setiap bagian. long skipBytes = partSize * i; long size = partSize < contentLength - skipBytes ? partSize : contentLength - skipBytes; // Buat UploadPartCopyRequest. Anda dapat menentukan kondisi dalam UploadPartCopyRequest. UploadPartCopyRequest uploadPartCopyRequest = new UploadPartCopyRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName); uploadPartCopyRequest.setUploadId(uploadId); uploadPartCopyRequest.setPartSize(size); uploadPartCopyRequest.setBeginIndex(skipBytes); uploadPartCopyRequest.setPartNumber(i + 1); UploadPartCopyResult uploadPartCopyResult = ossClient.uploadPartCopy(uploadPartCopyRequest); // Simpan ETag bagian yang dikembalikan ke partETags. partETags.add(uploadPartCopyResult.getPartETag()); } // Kirim tugas salin multi-bagian. CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest( destinationBucketName, destinationObjectName, uploadId, partETags); CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); System.out.println("versionId: "+completeMultipartUploadResult.getVersionId()); // Lihat informasi tag objek sumber. TagSet tagSet = ossClient.getObjectTagging(sourceBucketName, sourceObjectName); Map<String, String> getTags = tagSet.getAllTags(); System.out.println("src object tagging: "+ getTags.toString()); // Lihat informasi tag objek tujuan. tagSet = ossClient.getObjectTagging(destinationBucketName, destinationObjectName); getTags = tagSet.getAllTags(); System.out.println("dest object tagging: "+ getTags.toString()); } 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(); } } } }
Setel tag objek untuk tautan simbolik
Kode berikut menunjukkan cara menyetel tag objek untuk tautan simbolik.
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.util.*;
public class Demo {
public static void main(String[] args) throws Throwable {
// Setel titik akhir. Gunakan wilayah China (Hangzhou) sebagai contoh. Setel titik akhir ke wilayah aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh 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 tautan simbolik. Contoh: shortcut/myobject.txt.
String symLink = "shortcut/myobject.txt";
// Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt.
String destinationObjectName = "exampledir/exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Setel informasi tag untuk tautan simbolik.
Map<String, String> tags = new HashMap<String, String>();
// Tentukan kunci dan nilai untuk tag objek. Contoh: owner dan John.
tags.put("owner", "John");
tags.put("type", "document");
// Buat metadata untuk file yang diunggah.
ObjectMetadata metadata = new ObjectMetadata();
metadata.setObjectTagging(tags);
// Buat CreateSymlinkRequest.
CreateSymlinkRequest createSymlinkRequest = new CreateSymlinkRequest(bucketName, symLink, destinationObjectName);
// Setel metadata.
createSymlinkRequest.setMetadata(metadata);
// Buat tautan simbolik.
ossClient.createSymlink(createSymlinkRequest);
// Lihat informasi tag tautan simbolik.
TagSet tagSet = ossClient.getObjectTagging(bucketName, symLink);
Map<String, String> getTags = tagSet.getAllTags();
System.out.println("symLink tagging: "+ getTags.toString());
} 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();
}
}
}
}Referensi
Untuk kode contoh lengkap yang digunakan untuk menyetel tag objek, lihat GitHub.
Untuk informasi selengkapnya tentang operasi API yang digunakan untuk menyetel tag objek, lihat PutObjectTagging.