详情页标题前

阿里云对象存储OSS对象标签-云淘科技

详情页1

OSS支持使用标签对存储空间(Bucket)中的对象(Object)进行分类,您可以针对同标签的Object设置生命周期规则、访问权限等。

标签规则

Object标签使用一组键值对(Key-Value)标记Object,您可以在上传Object时添加标签,也可以为已有Object添加标签。

  • 单个Object最多可设置10个标签,Key不可重复。
  • 每个Key长度不超过128字符,每个Value长度不超过256字符。
  • Key和Value区分大小写。
  • 标签合法字符集包括大小写字母、数字、空格和以下符号:

    +‑=._:/

    通过HTTP Header的方式设置标签且标签中包含任意字符时,您需要对标签的Key和Value进行URL编码。

注意事项

  • 只有Bucket拥有者以及被授予oss:PutObjectTagging权限的用户拥有读写Object标签的权限。
  • 您可以在简单上传、分片上传、追加上传以及拷贝文件过程中为Object设置标签,也可以对已上传Object设置标签。
  • Object添加标签后,OSS会按照每小时内统计的标签数量收取标签费用。更多信息,请参见对象标签费用。
  • 更改标签信息不会更新Object的Last‑Modified时间。
  • 跨区域复制时,源Object标签也会复制到目标Bucket。

使用场景

  • Object标签结合生命周期
    对于周期性生成且无需长期保存的Object,可以在上传时设置指定的标签,之后通过生命周期规则,将拥有该标签的文件定期删除,从而节省存储费用。例如,通过生命周期规则指定前缀为dir1且拥有Key为key1、Value为value1标签的Object在距离最后一次更新时间30天后删除,配置示例如下:

    
     
      rule1
      dir1
      key1value1
      Enabled
      
        30
      
     
    
  • 授权RAM用户访问指定标签的Object

    例如,您可以通过RAM Policy授权RAM用户访问Key为key2、Value为value2的所有Object,RAM Policy配置示例如下。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "oss:GetObject",
          "Resource": "*",
          "Condition": {
            "StringEquals": {
              "oss:ExistingObjectTag/key2": [
                "value2"
              ]
            }
          }
        }
      ]
    }

    您还可以授予该用户其他操作权限(Action),例如向拥有指定标签的Object写入数据、查看Object相关信息等。关于RAM Policy支持的Action信息,请参见RAM Policy概述。

使用OSS控制台

  1. 登录OSS管理控制台。

  2. 单击Bucket 列表,然后单击目标Bucket名称。

  3. 在左侧导航栏,选择文件管理>文件列表

  4. 为Object设置标签。
    1. 选择需要设置标签的Object。
      • Bucket未开启版本控制

        在目标Object右侧操作栏下,选择阿里云对象存储OSS对象标签-云淘科技 > 标签

      • Bucket已开启版本控制

        在指定版本Object右侧操作栏下,选择阿里云对象存储OSS对象标签-云淘科技 > 标签

    2. 标签面板,按标签使用规则说明指定标签的
  5. 单击确定

使用阿里云SDK

以下仅列举常见SDK在简单上传过程中设置Object标签的代码示例。关于其他SDK在简单上传、分片上传、追加上传、拷贝文件过程中设置Object标签的代码示例,请参见SDK简介。

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;

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";
        // 填写Object完整路径,Object完整路径中不能包含Bucket名称。例如exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            Map tags = new HashMap();
            // 依次填写对象标签的键(例如owner)和值(例如John)。
            tags.put("owner", "John");
            tags.put("type", "document");

            // 在HTTP header中设置标签信息。
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setObjectTagging(tags);

            // 上传文件的同时设置标签信息。
            String content = "";
            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();
            }
        }
    }
}

 array(
              'x-oss-tagging' => 'key1=value1&key2=value2&key3=value3',
));
  
try {
      // 通过简单上传的方式上传Object。
      $ossClient->putObject($bucket, $object, $content, $options);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED
");
    printf($e->getMessage() . "
");
    return;
}

print(__FUNCTION__ . ": OK" . "
");  

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'
});

// 填写Object完整路径,Object完整路径中不能包含Bucket名称。例如exampledir/exampleobject.txt。
const objectName = 'exampledir/exampleobject.txt'
// 填写本地文件的完整路径,例如D:\localpath\examplefile.txt。
// 如果未指定本地路径只填写了本地文件名称(例如examplefile.txt),则默认从示例程序所属项目对应本地路径中上传文件。
const localFilepath = 'D:\localpath\examplefile.txt'

// 设置请求头信息。
const headers = {
  // 依次填写对象标签的键(例如owner)和值(例如John)。
  'x-oss-tagging': 'owner=John&type=document', 
}

client.put(objectName, localFilepath, {
  headers
})

# -*- coding: utf-8 -*-

import oss2
from oss2.headers import OSS_OBJECT_TAGGING
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 填写Object完整路径,Object完整路径中不能包含Bucket名称。例如exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'

# 设置tagging字符串。
tagging = "k1=v1&k2=v2&k3=v3"

# 如果标签中包含了任意字符,则需要对标签的Key和Value做URL编码。
k4 = "k4+-="
v4 = "+-=._:/"
tagging += "&" + oss2.urlquote(k4) + "=" + oss2.urlquote(v4)

# 在HTTP header中设置标签信息。
headers = dict()
headers[OSS_OBJECT_TAGGING] = tagging

# 调用put_object接口时指定headers,将会为上传的文件添加标签。
result = bucket.put_object(object_name, 'content', headers=headers)
print('http response status: ', result.status)

# 查看Object的标签信息。
result = bucket.get_object_tagging(object_name)
for key in result.tag_set.tagging_rule:
    print('tagging key: {}, value: {}'.format(key, result.tag_set.tagging_rule[key]))

using System.Text;
using Aliyun.OSS;
using System.Text;
using Aliyun.OSS.Util;

// 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";
// 填写Object完整路径。Object完整路径中不能包含Bucket名称。
var objectName = "exampleobject.txt";
var objectContent = "More than just cloud.";

String UrlEncodeKey(String key)
{
const string CharsetName = "utf-8";
const char separator = '/';
var segments = key.Split(separator);

var encodedKey = new StringBuilder();
encodedKey.Append(HttpUtils.EncodeUri(segments[0], CharsetName));
for (var i = 1; i < segments.Length; i++)
    encodedKey.Append(separator).Append(HttpUtils.EncodeUri(segments[i], CharsetName));

    if (key.EndsWith(separator.ToString()))
    {
        // String#split ignores trailing empty strings, e.g., "a/b/" will be split as a 2-entries array,
        // so we have to append all the trailing slash to the uri.
        foreach (var ch in key)
        {
            if (ch == separator)
                encodedKey.Append(separator);
            else
                break;
        }
    }

return encodedKey.ToString();
}
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);

    var meta = new ObjectMetadata();
    // 在HTTP header中设置标签信息。
    string str = UrlEncodeKey("key1") + "=" + UrlEncodeKey("value1") + "&" + UrlEncodeKey("key2") + "=" + UrlEncodeKey("value2");
    meta.AddHeader("x-oss-tagging", str);
    var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
    putRequest.Metadata = meta;

    // 上传文件的同时对文件设置标签。
    client.PutObject(putRequest);
    Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

package main

import (
	"fmt"
	"os"
	"strings"

	"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请按实际情况填写。
	client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 填写Bucket名称,例如examplebucket。
	bucketName := "examplebucket"
	// 填写Object完整路径,Object完整路径中不能包含Bucket名称。例如exampledir/exampleobject.txt。
	objectName := "exampledir/exampleobject.txt"

	// 获取存储空间。
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// 依次填写对象标签的键(例如owner)和值(例如John)。
	tag1 := oss.Tag{
		Key:   "owner",
		Value: "John",
	}
	tag2 := oss.Tag{
		Key:   "type",
		Value: "document",
	}
	tagging := oss.Tagging{
		Tags: []oss.Tag{tag1, tag2},
	}

	// 设置对象标签。
	err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"), oss.SetTagging(tagging))
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	fmt.Println(bucket.GetObjectTagging(objectName))
}

#include 
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* 初始化OSS账号信息。*/
    
    /* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    /* 填写Bucket名称,例如examplebucket。*/
    std::string BucketName = "examplebucket";
    /* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* 初始化网络等资源。*/
    InitializeSdk();

    ClientConfiguration conf;
    /* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared();
    OssClient client(Endpoint, credentialsProvider, conf);
    std::shared_ptr content = std::make_shared();
    *content << "test cpp sdk";
    PutObjectRequest request(BucketName, ObjectName, content);

    /* 设置标签。*/
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));
    request.setTagging(tagging.toQueryParameters());

    /* 上传文件。*/
    auto outcome = client.PutObject(request);

    if (!outcome.isSuccess()) {
        /* 异常处理。*/
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* 释放网络等资源。*/
    ShutdownSdk();
    return 0;
}

使用命令行工具ossutil

关于使用ossutil设置Object标签的具体操作,请参见添加或修改Object标签。

使用REST API

如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutObjectTagging。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/156756.html

(0)
上一篇 2023年12月10日
下一篇 2023年12月10日
详情页2

相关推荐

  • 阿里云人工智能平台PAIPAI图像物体检测-云淘科技

    PAI-EasyVision提供图像物体检测的训练和预测能力,支持多机分布式训练和预测。本文介绍如何通过PAI-EasyVision使用训练好的模型进行离线物体检测。 数据格式 详情请参见输入数据格式。 图像物体检测 基于上面产生的文件列表,您可以通过执行PAI命令启动图像物体检测的预测任务。 pai -name ev_predict_ext -Dmodel…

    阿里云人工智能平台PAI 2023年12月10日
  • 阿里云对象存储OSS设置Object ACL-云淘科技

    读写权限ACL用于定义用户或用户组被授予的访问权限。收到某个资源的请求后,OSS会检查相应的ACL以验证请求者是否拥有所需的访问权限。您可以在上传Object时设置相应的ACL,也可以在Object上传后的任意时间内根据自己的业务需求随时修改ACL。 注意事项 如果未设置Object的读写权限,即Object的ACL为default,则Object的读写权限…

    阿里云对象存储 2023年12月10日
  • 阿里云对象存储OSSPython绑定自定义域名-云淘科技

    文件(Object)上传至存储空间(Bucket)后,OSS会自动生成文件URL,您可以直接通过文件URL(即Bucket外网访问域名)访问该文件。如果您希望通过自定义域名访问这些Object,需要添加CNAME记录将自定义域名绑定至Object所在的Bucket。 注意事项 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿…

    阿里云对象存储 2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云日志服务SLS关联Logstore与OSS外表进行查询和分析-云淘科技

    在进行日志数据查询和分析时,经常需要结合外部表格对日志数据进行分析。本文介绍如何在日志服务中联合OSS外表进行数据分析。 前提条件 持续采集日志。具体操作,请参见数据采集。 已创建索引。具体操作,请参见创建索引。 已创建OSS Bucket。具体操作,请参见控制台创建存储空间。 背景信息 某支付公司,想要分析用户年龄、地域、性别等因素对支付习惯的影响。该公司…

    阿里云日志服务SLS 2023年12月10日
  • 阿里云对象存储OSSJava请求者付费模式-云淘科技

    请求者付费模式是指由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用,而Bucket拥有者仅支付存储费用。当您希望共享数据,但又不希望产生流量费用和请求费用时,您可以开启此功能。 注意事项 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的R…

    阿里云对象存储 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。