全部产品
Search
文档中心

:Menyaring objek OSS yang waktu modifikasi terakhirnya berada dalam periode waktu tertentu

更新时间:Aug 08, 2025

Untuk menyaring objek Object Storage Service (OSS) berdasarkan waktu modifikasi terakhir dalam rentang waktu tertentu, Anda dapat menggunakan fitur pengindeksan data. Tentukan tanggal mulai dan akhir sebagai kondisi indeks untuk meningkatkan efisiensi kueri objek. Fitur ini cocok untuk pengambilan tepat waktu dari objek sensitif waktu dalam jejak audit, sinkronisasi data, cadangan berkala, analisis biaya, atau skenario bisnis lainnya.

Skenario

  • Persyaratan audit dan kepatuhan

    Perusahaan atau organisasi perlu meninjau aktivitas data secara berkala untuk memastikan kepatuhan. Menyaring objek yang diunggah dalam periode tertentu membantu mengelola siklus hidup data, melacak sejarah pembuatan dan perubahan, serta mendukung proses audit.

  • Cadangan dan pemulihan data

    Dalam operasi cadangan atau pemulihan dengan kebijakan tertentu, menyaring objek baru atau diperbarui dalam rentang waktu tertentu membantu mengidentifikasi target cadangan, sehingga mengurangi penggunaan penyimpanan dan biaya transmisi.

  • Analisis data dan pembuatan laporan

    Untuk aplikasi yang melibatkan analisis data besar, pemrosesan log, atau pelaporan bisnis, data baru yang dihasilkan dalam periode tertentu harus diproses secara berkala. Menyaring objek dalam rentang waktu tertentu membantu mengidentifikasi set data yang relevan dan menyederhanakan ekstraksi data.

  • Sinkronisasi data oleh sistem manajemen konten

    Sistem manajemen konten perlu menyinkronkan objek yang diunggah atau diperbarui secara berkala untuk menjaga ketepatan waktu dan integritas konten situs web.

  • Optimasi biaya dan penghapusan sumber daya

    Perusahaan perlu meninjau dan menghapus objek yang tidak lagi dibutuhkan. Menyaring objek yang belum diperbarui dalam periode tertentu membantu mengidentifikasi objek tersebut, memastikan penggunaan sumber daya yang efisien.

  • Pemecahan masalah dan penelusuran masalah

    Dalam kasus kegagalan sistem, kehilangan data, atau perilaku tidak biasa, menyaring objek yang diunggah dalam periode tertentu membantu insinyur menemukan objek atau operasi yang mungkin menyebabkan masalah.

  • Kolaborasi dan pengendalian versi

    Dalam lingkungan kolaborasi multi-pengguna, menyaring objek yang diunggah dalam periode tertentu membantu menelusuri, membandingkan, atau memulihkan versi historis ke titik waktu tertentu.

Prosedur

Gunakan Konsol OSS

  1. Masuk ke Konsol OSS.

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

  3. Di pohon navigasi kiri, pilih Object Management > Data Indexing.

  4. Di halaman Data Indexing, aktifkan opsi Metadata Management.

    Waktu yang diperlukan agar manajemen metadata berlaku bervariasi berdasarkan jumlah objek dalam bucket.

  5. Di bagian OSS metadata condition, tentukan Tanggal Mulai dan Tanggal Akhir di sebelah Waktu Terakhir Dimodifikasi. Nilai Tanggal Mulai dan Tanggal Akhir akurat hingga detik. Pertahankan pengaturan default untuk parameter lainnya.

  6. Di bagian Object Sort Order, atur Urutan Sortir ke Menaik dan Disusun Berdasar ke Nama Objek.

  7. Klik Query.

Gunakan SDK OSS

Hanya SDK OSS untuk Java, Python, dan Go yang mendukung penggunaan fitur pengindeksan data untuk menyaring objek berdasarkan kondisi tertentu. Sebelum menggunakan fitur ini, aktifkan manajemen metadata untuk bucket yang bersangkutan.

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 {

    // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
    private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    // Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: 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 sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Secara eksplisit nyatakan penggunaan algoritma tanda tangan V4.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Tetapkan jumlah maksimum objek yang ingin Anda kembalikan menjadi 100.
            int maxResults = 100;
            // Tentukan tanggal mulai dan tanggal akhir dari waktu modifikasi terakhir objek yang ingin Anda kueri. Dalam contoh ini, tanggal mulai diatur ke 1 Desember 2023 dan tanggal akhir diatur ke 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" +
                    "}";
            // Tentukan bahwa hasil yang dikembalikan diurutkan secara menaik berdasarkan nama objek.
            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("Nama File: " + file.getFilename());
                    // Kueri nilai ETag yang digunakan untuk mengidentifikasi isi objek.
                    System.out.println("ETag: " + file.getETag());
                    // Kueri daftar kontrol akses (ACL) objek.
                    System.out.println("ObjectACL: " + file.getObjectACL());
                    // Kueri jenis objek.
                    System.out.println("OssObjectType: " + file.getOssObjectType());
                    // Kueri kelas penyimpanan objek.
                    System.out.println("OssStorageClass: " + file.getOssStorageClass());
                    // Kueri 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("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("Pesan Kesalahan: " + ce.getMessage());
        } finally {
            // Matikan instance 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 sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())

# Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
# Tentukan nama bucket. Contoh: examplebucket.
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket0703')

# Tentukan tanggal mulai dan tanggal akhir dari waktu modifikasi terakhir objek yang ingin Anda kueri. Dalam contoh ini, tanggal mulai diatur ke 1 Desember 2023 dan tanggal akhir diatur ke 31 Maret 2024.
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 sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Buat instance OSSClient.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan 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)
	}
	// Tentukan tanggal mulai dan tanggal akhir dari waktu modifikasi terakhir objek yang ingin Anda kueri. Dalam contoh ini, tanggal mulai diatur ke 1 Desember 2023 dan tanggal akhir diatur ke 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"
}`,
                // Tentukan bahwa hasil yang dikembalikan diurutkan secara menaik berdasarkan nama objek.
		Sort:  "Filename",
		Order: "asc",
	}
	// Kueri objek yang sesuai dengan kondisi tertentu dan daftarkan informasi objek berdasarkan bidang dan metode pengurutan tertentu.
	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("Nama File: %s\n", file.Filename)
		fmt.Printf("Ukuran: %d\n", file.Size)
		fmt.Printf("Waktu Modifikasi File:%s\n", file.FileModifiedTime)
		fmt.Printf("Jenis Objek OSS:%s\n", file.OssObjectType)
		fmt.Printf("Kelas Penyimpanan OSS:%s\n", file.OssStorageClass)
		fmt.Printf("ACL Objek:%s\n", file.ObjectACL)
		fmt.Printf("ETag:%s\n", file.ETag)
		fmt.Printf("CRC64 OSS:%s\n", file.OssCRC64)
		fmt.Printf("Jumlah Tagging OSS:%d\n", file.OssTaggingCount)
		for _, tagging := range file.OssTagging {
			fmt.Printf("Kunci Tagging OSS:%s\n", tagging.Key)
			fmt.Printf("Nilai Tagging OSS:%s\n", tagging.Value)
		}
		for _, userMeta := range file.OssUserMeta {
			fmt.Printf("Kunci Meta Pengguna OSS:%s\n", userMeta.Key)
			fmt.Printf("Nilai Meta Pengguna OSS:%s\n", userMeta.Value)
		}
	}
}

Gunakan API RESTful

Jika bisnis Anda memerlukan tingkat penyesuaian tinggi, Anda dapat memanggil API RESTful langsung. Untuk memanggil API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut, lihat DoMetaQuery.

Referensi

Fitur pengindeksan data mendukung beberapa kondisi penyaringan, seperti kelas penyimpanan, ACL, dan ukuran objek. Anda dapat menyaring objek yang memenuhi kondisi tertentu secara efisien. Misalnya, Anda dapat menyaring objek dengan ACL baca-publik atau yang ukurannya kurang dari 64 KB dalam sebuah bucket. Untuk informasi lebih lanjut, lihat Pengindeksan data.