OSS SDK for Java、OSS SDK for Python、および OSS SDK for Go は、データインデックスをサポートしており、指定された条件を満たすオブジェクトをクエリできます。この機能を使用する前に、対象のバケットでメタデータ管理を有効にする必要があります。
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 {
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
private static String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// エンドポイントに対応するリージョンを指定します。たとえば、エンドポイントが oss-cn-hangzhou.aliyuncs.com の場合、リージョンを cn-hangzhou に設定します。
private static String region = "cn-hangzhou";
// バケット名を指定します。例: examplebucket。
private static String bucketName = "examplebucket";
public static void main(String[] args) throws Exception {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
// V4 署名アルゴリズムが使用されることを明示的に宣言します。
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 返されるオブジェクトの最大数を 100 に設定します。
int maxResults = 100;
// 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリします。
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" +
"}";
// 結果をオブジェクト名で昇順にソートします。
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("ファイル名: " + file.getFilename());
// オブジェクトの ETag を取得します。
System.out.println("ETag: " + file.getETag());
// オブジェクトのアクセスコントロールリスト (ACL) を取得します。
System.out.println("ObjectACL: " + file.getObjectACL());
// オブジェクトタイプを取得します。
System.out.println("OssObjectType: " + file.getOssObjectType());
// オブジェクトのストレージクラスを取得します。
System.out.println("OssStorageClass: " + file.getOssStorageClass());
// オブジェクトタグの数を取得します。
System.out.println("TaggingCount: " + file.getOssTaggingCount());
if (file.getOssTagging() != null) {
for (Tagging tag : file.getOssTagging().getTagging()) {
System.out.println("キー: " + tag.getKey());
System.out.println("値: " + tag.getValue());
}
}
if (file.getOssUserMeta() != null) {
for (UserMeta meta : file.getOssUserMeta().getUserMeta()) {
System.out.println("キー: " + meta.getKey());
System.out.println("値: " + meta.getValue());
}
}
}
}
} catch (OSSException oe) {
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエスト ID:" + oe.getRequestId());
System.out.println("ホスト ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("エラーメッセージ: " + ce.getMessage());
} finally {
// OSSClient インスタンスをシャットダウンします。
ossClient.shutdown();
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import MetaQuery, AggregationsRequest
# 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
# バケット名を指定します。例: examplebucket。
bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリし、結果をオブジェクト名で昇順にソートします。
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() {
// 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("エラー:", err)
os.Exit(-1)
}
// OSS クライアントインスタンスを作成します。
// この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントに置き換えてください。
client, err := oss.New("oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("エラー:", err)
os.Exit(-1)
}
// 2023年12月1日から2024年3月31日までの間に最終更新されたオブジェクトをクエリします。
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"
}`,
// 結果をオブジェクト名で昇順にソートします。
Sort: "Filename",
Order: "asc",
}
// 指定された条件を満たすオブジェクトをクエリし、指定されたフィールドとソート順に基づいてオブジェクト情報をリスト表示します。
result, err := client.DoMetaQuery("examplebucket", query)
if err != nil {
fmt.Println("エラー:", err)
os.Exit(-1)
}
fmt.Printf("NextToken:%s\n", result.NextToken)
for _, file := range result.Files {
fmt.Printf("ファイル名: %s\n", file.Filename)
fmt.Printf("サイズ: %d\n", file.Size)
fmt.Printf("ファイル最終更新日時:%s\n", file.FileModifiedTime)
fmt.Printf("OSS オブジェクトタイプ:%s\n", file.OssObjectType)
fmt.Printf("OSS ストレージクラス:%s\n", file.OssStorageClass)
fmt.Printf("オブジェクト ACL:%s\n", file.ObjectACL)
fmt.Printf("ETag:%s\n", file.ETag)
fmt.Printf("OSS CRC64:%s\n", file.OssCRC64)
fmt.Printf("OSS タギング数:%d\n", file.OssTaggingCount)
for _, tagging := range file.OssTagging {
fmt.Printf("OSS タギングキー:%s\n", tagging.Key)
fmt.Printf("OSS タギング値:%s\n", tagging.Value)
}
for _, userMeta := range file.OssUserMeta {
fmt.Printf("OSS ユーザーメタキー:%s\n", userMeta.Key)
fmt.Printf("値:%s\n", userMeta.Value)
}
}
}