OSS SDK for Java, OSS SDK for Python, dan OSS SDK for Go mendukung pengindeksan data untuk mengkueri objek yang memenuhi kondisi tertentu. Anda harus mengaktifkan Metadata Management untuk bucket target sebelum menggunakan fitur ini.
Java
package com.aliyun.sts.sample;
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.*;
public class Demo {
// Contoh ini menggunakan endpoint wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan wilayah yang sesuai dengan endpoint Anda. Misalnya, jika endpoint Anda adalah oss-cn-hangzhou.aliyuncs.com, atur wilayah menjadi cn-hangzhou.
private static String region = "cn-hangzhou";
// Tentukan nama bucket. Contoh: examplebucket.
private static String bucketName = "examplebucket";
public static void main(String[] args) throws Exception {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Buat instans OSSClient.
// Panggil metode shutdown untuk melepas resource saat instans OSSClient tidak lagi diperlukan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// Secara eksplisit nyatakan bahwa algoritma signature V4 digunakan.
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Tetapkan jumlah maksimum objek yang dikembalikan menjadi 100.
int maxResults = 100;
// Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024.
String query = "{\n" +
" \"SubQueries\":[\n" +
" {\n" +
" \"Field\":\"FileModifiedTime\",\n" +
" \"Value\": \"2023-12-01T00:00:00.000+08:00\",\n" +
" \"Operation\":\"gt\"\n" +
" }, \n" +
" {\n" +
" \"Field\":\"FileModifiedTime\",\n" +
" \"Value\": \"2024-03-31T23:59:59.000+08:00\",\n" +
" \"Operation\":\"lt\"\n" +
" }\n" +
" ],\n" +
" \"Operation\":\"and\"\n" +
"}";
// Urutkan hasil berdasarkan nama objek secara ascending.
String sort = "Filename";
DoMetaQueryRequest doMetaQueryRequest = new DoMetaQueryRequest(bucketName, maxResults, query, sort);
doMetaQueryRequest.setOrder(SortOrder.ASC);
DoMetaQueryResult doMetaQueryResult = ossClient.doMetaQuery(doMetaQueryRequest);
if (doMetaQueryResult.getFiles() != null) {
for (ObjectFile file : doMetaQueryResult.getFiles().getFile()) {
System.out.println("Filename: " + file.getFilename());
// Dapatkan ETag objek.
System.out.println("ETag: " + file.getETag());
// Dapatkan daftar kontrol akses (ACL) objek.
System.out.println("ObjectACL: " + file.getObjectACL());
// Dapatkan tipe objek.
System.out.println("OssObjectType: " + file.getOssObjectType());
// Dapatkan kelas penyimpanan objek.
System.out.println("OssStorageClass: " + file.getOssStorageClass());
// Dapatkan jumlah tag objek.
System.out.println("TaggingCount: " + file.getOssTaggingCount());
if (file.getOssTagging() != null) {
for (Tagging tag : file.getOssTagging().getTagging()) {
System.out.println("Key: " + tag.getKey());
System.out.println("Value: " + tag.getValue());
}
}
if (file.getOssUserMeta() != null) {
for (UserMeta meta : file.getOssUserMeta().getUserMeta()) {
System.out.println("Key: " + meta.getKey());
System.out.println("Value: " + meta.getValue());
}
}
}
}
} catch (OSSException oe) {
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("Error Message: " + ce.getMessage());
} finally {
// Matikan instans OSSClient.
ossClient.shutdown();
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# Contoh ini menggunakan endpoint wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket0703')
# Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024, dan urutkan hasil berdasarkan nama objek secara ascending.
do_meta_query_request = MetaQuery(max_results=100, query='{"SubQueries":[{"Field":"FileModifiedTime","Value": "2023-12-01T00:00:00.000+08:00","Operation":"gt"}, {"Field":"FileModifiedTime","Value": "2024-03-31T23:59:59.000+08:00","Operation":"lt"}],"Operation":"and"}', sort='Filename', order='asc')
result = bucket.do_bucket_meta_query(do_meta_query_request)
for s in result.files:
print(s.file_name)
print(s.etag)
print(s.oss_object_type)
print(s.oss_storage_class)
print(s.oss_crc64)
print(s.object_acl)
Go
package main
import (
"fmt"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
"os"
)
func main() {
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Buat instans OSSClient.
// Contoh ini menggunakan endpoint untuk wilayah China (Hangzhou). Ganti nilai ini dengan endpoint aktual Anda.
client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Kueri objek yang terakhir dimodifikasi antara 1 Desember 2023 dan 31 Maret 2024.
query := oss.MetaQuery{
NextToken: "",
MaxResults: 100,
Query: `{
"SubQueries":[
{
"Field":"FileModifiedTime",
"Value": "2023-12-01T00:00:00.000+08:00",
"Operation":"gt"
},
{
"Field":"FileModifiedTime",
"Value": "2024-03-31T23:59:59.000+08:00",
"Operation":"lt"
}
],
"Operation":"and"
}`,
// Urutkan hasil berdasarkan nama objek secara ascending.
Sort: "Filename",
Order: "asc",
}
// Kueri objek yang memenuhi kondisi tertentu dan tampilkan informasi objek berdasarkan bidang dan urutan pengurutan yang ditentukan.
result, err := client.DoMetaQuery("examplebucket", query)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("NextToken:%s\n", result.NextToken)
for _, file := range result.Files {
fmt.Printf("File name: %s\n", file.Filename)
fmt.Printf("size: %d\n", file.Size)
fmt.Printf("File Modified Time:%s\n", file.FileModifiedTime)
fmt.Printf("Oss Object Type:%s\n", file.OssObjectType)
fmt.Printf("Oss Storage Class:%s\n", file.OssStorageClass)
fmt.Printf("Object ACL:%s\n", file.ObjectACL)
fmt.Printf("ETag:%s\n", file.ETag)
fmt.Printf("Oss CRC64:%s\n", file.OssCRC64)
fmt.Printf("Oss Tagging Count:%d\n", file.OssTaggingCount)
for _, tagging := range file.OssTagging {
fmt.Printf("Oss Tagging Key:%s\n", tagging.Key)
fmt.Printf("Oss Tagging Value:%s\n", tagging.Value)
}
for _, userMeta := range file.OssUserMeta {
fmt.Printf("Oss User Meta Key:%s\n", userMeta.Key)
fmt.Printf("Oss User Meta Key Value:%s\n", userMeta.Value)
}
}
}