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.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws Exception {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写存放清单结果的Bucket名称。
String destBucketName ="yourDestinationBucketName";
// 填写Bucket所有者授予的账户ID。
String accountId ="yourDestinationBucketAccountId";
// 填写具有读取源Bucket所有文件和向目标Bucket写入文件权限的角色名称。
String roleArn ="yourDestinationBucketRoleArn";
// 填写Bucket所在地域。以华东1(杭州)为例,Region填写为cn-hangzhou。
String region = "cn-hangzhou";
// 创建OSSClient实例。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 创建清单配置。
InventoryConfiguration inventoryConfiguration = new InventoryConfiguration();
// 设置清单规则名称。
String inventoryId = "testid";
inventoryConfiguration.setInventoryId(inventoryId);
// 设置清单中包含的Object属性。
List<String> fields = new ArrayList<String>();
fields.add(InventoryOptionalFields.Size);
fields.add(InventoryOptionalFields.LastModifiedDate);
fields.add(InventoryOptionalFields.IsMultipartUploaded);
fields.add(InventoryOptionalFields.StorageClass);
fields.add(InventoryOptionalFields.ETag);
fields.add(InventoryOptionalFields.EncryptionStatus);
inventoryConfiguration.setOptionalFields(fields);
// 设置清单的生成计划,以下示例为每周一次。其中,Weekly表示每周一次,Daily表示每天一次。
inventoryConfiguration.setSchedule(new InventorySchedule().withFrequency(InventoryFrequency.Weekly));
// 设置清单中包含的Object的版本为当前版本。如果设置为InventoryIncludedObjectVersions.All则表示Object的所有版本在版本控制状态下生效。
inventoryConfiguration.setIncludedObjectVersions(InventoryIncludedObjectVersions.Current);
// 清单配置是否启用的标识,取值为true或者false,设置为true表示启用清单配置,设置为false表示关闭清单配置。
inventoryConfiguration.setEnabled(true);
// 设置清单筛选规则,指定筛选Object的前缀。
InventoryFilter inventoryFilter = new InventoryFilter().withPrefix("obj-prefix");
inventoryConfiguration.setInventoryFilter(inventoryFilter);
// 创建存放清单结果的目标Bucket配置。
InventoryOSSBucketDestination ossInvDest = new InventoryOSSBucketDestination();
// 设置存放清单结果的存储路径前缀。
ossInvDest.setPrefix("destination-prefix");
// 设置清单格式。
ossInvDest.setFormat(InventoryFormat.CSV);
// 设置目标Bucket的用户accountId。
ossInvDest.setAccountId(accountId);
// 设置目标Bucket的roleArn。
ossInvDest.setRoleArn(roleArn);
// 设置目标Bucket的名称。
ossInvDest.setBucket(destBucketName);
// 如果需要使用KMS加密清单,请参考如下设置。
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// InventoryServerSideEncryptionKMS serverSideKmsEncryption = new InventoryServerSideEncryptionKMS().withKeyId("test-kms-id");
// inventoryEncryption.setServerSideKmsEncryption(serverSideKmsEncryption);
// ossInvDest.setEncryption(inventoryEncryption);
// 如果需要使用OSS服务端加密清单,请参考如下设置。
// InventoryEncryption inventoryEncryption = new InventoryEncryption();
// inventoryEncryption.setServerSideOssEncryption(new InventoryServerSideEncryptionOSS());
// ossInvDest.setEncryption(inventoryEncryption);
// 设置清单的目的地。
InventoryDestination destination = new InventoryDestination();
destination.setOssBucketDestination(ossInvDest);
inventoryConfiguration.setDestination(destination);
// 上传清单配置。
ossClient.setBucketInventoryConfiguration(bucketName, inventoryConfiguration);
} 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();
}
}
}
}
const OSS = require('ali-oss');
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourregion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
// 填写存储空间名称。
bucket: 'yourbucketname'
});
const inventory = {
// 设置清单配置ID。
id: 'default',
// 清单配置是否启用的标识,取值为true或false。
isEnabled: false,
//(可选)设置清单筛选规则,指定筛选object的前缀。
prefix: 'ttt',
OSSBucketDestination: {
// 设置清单格式。
format: 'CSV',
// 目标Bucket拥有者的账号ID。
accountId: '<Your AccountId>',
// 目标Bucket的角色名称。
rolename: 'AliyunOSSRole',
// 目标Bucket的名称。
bucket: '<Your BucketName>',
//(可选)清单结果的存储路径前缀。
prefix: '<Your Prefix>',
// 如果需要使用SSE-OSS加密清单,请参考以下代码。
//encryption: {'SSE-OSS': ''},
// 如果需要使用SSE-KMS加密清单,请参考以下代码。
/*
encryption: {
'SSE-KMS': {
keyId: 'test-kms-id',
};,
*/
},
// 设置清单的生成计划,WEEKLY对应每周一次,DAILY对应每天一次。
frequency: 'Daily',
// 设置清单结果中包含了Object的所有版本, 如果设置为Current,则表示仅包含Object的当前版本。
includedObjectVersions: 'All',
optionalFields: {
//(可选)设置清单中包含的Object属性。
field: ["Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus"]
},
}
async function putInventory(){
// 需要添加清单配置的Bucket名称。
const bucket = '<Your BucketName>';
try {
await client.putBucketInventory(bucket, inventory);
console.log('清单配置添加成功')
} catch(err) {
console.log('清单配置添加失败: ', err);
}
}
putInventory()
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import (InventoryConfiguration,
InventoryFilter,
InventorySchedule,
InventoryDestination,
InventoryBucketDestination,
INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT,
INVENTORY_FREQUENCY_DAILY,
INVENTORY_FORMAT_CSV,
FIELD_SIZE,
FIELD_LAST_MODIFIED_DATE,
FIELD_STORAG_CLASS,
FIELD_ETAG,
FIELD_IS_MULTIPART_UPLOADED,
FIELD_ENCRYPTION_STATUS)
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"
# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 填写Bucket所有者授予的账户ID。例如:1283641033516515
account_id = 'yourtBucketDestinationAccountId'
# 填写具有读取源Bucket所有文件和向目标Bucket写入文件权限的角色名称。例如:acs:ram::1283641033516515:role/AliyunOSSRole
role_arn = 'yourBucketDestinationRoleArn'
# 填写存放清单结果的Bucket名称。
dest_bucket_name = 'yourDestinationBucketName'
# 设置清单规则名称。
inventory_id = "inventory1"
# 设置清单结果中包含的Object属性。
optional_fields = [FIELD_SIZE, FIELD_LAST_MODIFIED_DATE, FIELD_STORAG_CLASS,
FIELD_ETAG, FIELD_IS_MULTIPART_UPLOADED, FIELD_ENCRYPTION_STATUS]
# 创建存放清单文件的目标Bucket配置。
bucket_destination = InventoryBucketDestination(
# 目标Bucket的用户accountId。
account_id=account_id,
# 目标Bucket的roleArn。
role_arn=role_arn,
# 目标Bucket的名称。
bucket=dest_bucket_name,
# 指定清单格式。
inventory_format=INVENTORY_FORMAT_CSV,
# 清单结果的存储路径前缀。
prefix='destination-prefix',
# 如果需要使用KMS加密清单,请参考如下设置。
# sse_kms_encryption=InventoryServerSideEncryptionKMS("test-kms-id"),
# 如果需要使用OSS服务端加密清单,请参考如下设置。
# sse_oss_encryption=InventoryServerSideEncryptionOSS()
)
# 创建清单配置。
inventory_configuration = InventoryConfiguration(
# 设置清单的配置id。
inventory_id=inventory_id,
# 清单配置是否启用的标识, true或false。
is_enabled=True,
# 设置清单的生成计划,以下示例为每天一次。其中,WEEKLY对应每周一次,DAILY对应每天一次。
inventory_schedule=InventorySchedule(frequency=INVENTORY_FREQUENCY_DAILY),
# 设置清单中包含的object的版本为当前版本。如果设置为INVENTORY_INCLUDED_OBJECT_VERSIONS_ALL则表示object的所有版本,在版本控制状态下生效。
included_object_versions=INVENTORY_INCLUDED_OBJECT_VERSIONS_CURRENT,
# 设置清单清筛选object的前缀。
# inventory_filter=InventoryFilter(prefix="obj-prefix"),
# 设置清单清筛选条件。假如筛选文件最后修改时间的起始时间戳为1637883649,
inventory_filter=InventoryFilter(
# 筛选规则的匹配前缀。
"obj-prefix",
# 筛选文件最后修改时间的起始时间戳,单位为秒。
1637883649,
# 筛选文件最后修改时间的终止时间戳,单位为秒。
1638347592,
# 筛选文件的最小大小,单位为B。
1024,
# 筛选文件的最大大小,单位为B。
1048576,
# 筛选文件的存储类型,支持指定多种存储类型。
'Standard,IA'),
# 设置清单中包含的object属性。
optional_fields=optional_fields,
inventory_destination=InventoryDestination(bucket_destination=bucket_destination))
# 上传清单配置。
result = bucket.put_bucket_inventory_configuration(inventory_configuration)
print(result.status)
using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "yourEndpoint";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// 填写Bucket名称。
var bucketName = "examplebucket";
// 填写Bucket所有者授予的账户ID。
var accountId ="yourDestinationBucketAccountId";
// 填写具有读取源Bucket所有文件和向目标Bucket写入文件权限的角色名称。
var roleArn ="yourDestinationBucketRoleArn";
// 填写存放清单结果的Bucket名称。
var destBucketName ="yourDestinationBucketName";
// 填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。
const string region = "cn-hangzhou";
// 创建ClientConfiguration实例,按照您的需要修改默认参数。
var conf = new ClientConfiguration();
// 设置v4签名。
conf.SignatureVersion = SignatureVersion.V4;
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// 添加Bucket清单。
var config = new InventoryConfiguration();
// 设置清单规则名称。
config.Id = "report1";
// 清单配置是否启用的标识,取值为true或false。设置为true,表示启用清单配置。
config.IsEnabled = true;
// 设置清单筛选规则,指定筛选Object的前缀。
config.Filter = new InventoryFilter("filterPrefix");
// 创建清单的bucket目的地配置。
config.Destination = new InventoryDestination();
config.Destination.OSSBucketDestination = new InventoryOSSBucketDestination();
// 设置清单格式。
config.Destination.OSSBucketDestination.Format = InventoryFormat.CSV;
// 存放清单结果的目标Bucket的用户accountId。
config.Destination.OSSBucketDestination.AccountId = accountId;
// 存放清单结果的目标Bucket的roleArn。
config.Destination.OSSBucketDestination.RoleArn = roleArn;
// 存放清单结果的目标Bucket名称。
config.Destination.OSSBucketDestination.Bucket = destBucketName;
// 设置存放清单结果的存储路径前缀。
config.Destination.OSSBucketDestination.Prefix = "prefix1";
// 设置清单的生成计划,以下示例为每周一次。其中,Weekly对应每周一次,Daily对应每天一次。
config.Schedule = new InventorySchedule(InventoryFrequency.Daily);
// 设置清单中包含的object的版本为当前版本。如果设置为InventoryIncludedObjectVersions.All则表示object的所有版本,在版本控制状态下生效。
config.IncludedObjectVersions = InventoryIncludedObjectVersions.All;
// 设置清单中包含的Object属性。
config.OptionalFields.Add(InventoryOptionalField.Size);
config.OptionalFields.Add(InventoryOptionalField.LastModifiedDate);
config.OptionalFields.Add(InventoryOptionalField.StorageClass);
config.OptionalFields.Add(InventoryOptionalField.IsMultipartUploaded);
config.OptionalFields.Add(InventoryOptionalField.EncryptionStatus);
config.OptionalFields.Add(InventoryOptionalField.ETag);
var req = new SetBucketInventoryConfigurationRequest(bucketName, config);
client.SetBucketInventoryConfiguration(req);
Console.WriteLine("Set bucket:{0} InventoryConfiguration succeeded", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
/// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// yourRegion填写Bucket所在地域,以华东1(杭州)为例,填写为cn-hangzhou。其它Region请按实际情况填写。
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// 设置签名版本
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
IsEnabled := true
// 如果需要使用KMS加密清单,请参考如下设置。
//var invEncryption oss.InvEncryption
//var invSseOss oss.InvSseOss
//var invSseKms oss.InvSseKms
//invSseKms.KmsId = "<yourKmsId>" // 填写KMS密钥ID。
//invEncryption.SseOss = &invSseOss // 使用OSS完全托管加密(SSE-OSS)方式进行加密。
//invEncryption.SseKms = &invSseKms // 使用KMS托管密钥(SSE-KMS)的方式进行加密。
invConfig := oss.InventoryConfiguration{
// 由用户指定的清单名称,清单名称在当前Bucket下必须全局唯一。
Id: "yourInventoryId2",
// 启用清单配置。
IsEnabled: &IsEnabled,
// 设置清单筛选规则,指定筛选Object的前缀。
Prefix: "yourFilterPrefix",
OSSBucketDestination: oss.OSSBucketDestination{
// 导出清单文件的文件格式。
Format: "CSV",
// 存储空间所有者授予的账户ID,例如109885487000****。
AccountId: "yourGrantAccountId",
// 存储空间所有者授予操作权限的角色名,比如acs:ram::109885487000****:role/ram-test。
RoleArn: "yourRoleArn",
// 存放导出的清单结果的Bucket名称。
Bucket: "acs:oss:::" + "yourDestBucketName",
// 存放清单结果的存储路径前缀。
Prefix: "yourDestPrefix",
// 如果清单需要加密,请参考以下代码。
//Encryption: &invEncryption,
},
// 清单文件导出的周期。
Frequency: "Daily",
// 是否在清单中包含Object的所有版本信息。
IncludedObjectVersions: "All",
OptionalFields: oss.OptionalFields{
// 清单结果中包含的配置项。
Field: []string{
"Size", "LastModifiedDate", "ETag", "StorageClass", "IsMultipartUploaded", "EncryptionStatus",
},
},
}
// yourBucketName填写待配置清单规则的Bucket名称。
err = client.SetBucketInventory("yourBucketName", invConfig)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* yourRegion填写Bucket所在地域对应的Region。以华东1(杭州)为例,Region填写为cn-hangzhou。*/
std::string Region = "yourRegion";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
InventoryConfiguration inventoryConf;
/* 指定清单规则名称,该名称在当前Bucket下必须全局唯一。*/
inventoryConf.setId("inventoryId");
/* 清单配置是否启用的标识,可选值为true或false。*/
inventoryConf.setIsEnabled(true);
/* (可选)清单筛选的前缀。指定前缀后,清单将筛选出符合前缀的Object。*/
inventoryConf.setFilter(InventoryFilter("objectPrefix"));
InventoryOSSBucketDestination dest;
/* 导出清单文件的文件格式。*/
dest.setFormat(InventoryFormat::CSV);
/* 存储空间拥有者的账户UID。*/
dest.setAccountId("10988548********");
/* 指定角色名称,该角色需要拥有读取源存储空间所有文件以及向目标存储空间写入文件的权限,格式为acs:ram::uid:role/rolename。*/
dest.setRoleArn("acs:ram::10988548********:role/inventory-test");
/* 存放导出的清单文件的存储空间。*/
dest.setBucket("yourDstBucketName");
/* 清单文件的存储路径前缀。*/
dest.setPrefix("yourPrefix");
/* (可选)清单文件的加密方式, 可选SSEOSS或者SSEKMS方式加密。*/
//dest.setEncryption(InventoryEncryption(InventorySSEOSS()));
//dest.setEncryption(InventoryEncryption(InventorySSEKMS("yourKmskeyId")));
inventoryConf.setDestination(dest);
/* 清单文件导出的周期, 可选为Daily或者Weekly。*/
inventoryConf.setSchedule(InventoryFrequency::Daily);
/* 是否在清单中包含Object版本信息, 可选为All或者Current。*/
inventoryConf.setIncludedObjectVersions(InventoryIncludedObjectVersions::All);
/* (可选)设置清单结果中应包含的配置项, 请按需配置。*/
InventoryOptionalFields field {
InventoryOptionalField::Size, InventoryOptionalField::LastModifiedDate,
InventoryOptionalField::ETag, InventoryOptionalField::StorageClass,
InventoryOptionalField::IsMultipartUploaded, InventoryOptionalField::EncryptionStatus
};
inventoryConf.setOptionalFields(field);
/* 设置清单配置。*/
auto outcome = client.SetBucketInventoryConfiguration(
SetBucketInventoryConfigurationRequest(BucketName, inventoryConf));
if (!outcome.isSuccess()) {
/* 异常处理。*/
std::cout << "Set Bucket Inventory fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}