本文介绍如何设置对象标签(Object Tagging)。

对象标签使用一组键值对(Key-Value)来标记对象。对象标签的详情请参考开发指南的对象标签

说明
  • 您可以在上传Object时设置对象标签,也可以对已上传Object设置对象标签。设置对象标签时,若对象已有标签,则覆盖原标签。设置对象标签的详情请参考PutObjectTagging
  • 设置对象标签时要求请求者有PutObjectTagging权限。
  • 更改标签时不会更新Object的Last‑Modified时间。
  • 标签合法字符集包括大小写字母、数字、空格和以下符号:

    +‑=._:/

上传Object时添加对象标签

  • 简单上传时添加对象标签

    以下代码用于简单上传时(即通过PutObject方法)添加对象标签:

    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
    
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B',
    }
    
    client.put('fileName', 'file', {
      headers
    })
  • 分片上传时添加对象标签

    以下代码用于分片上传时(即通过multipartUpload方法)添加对象标签:

    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B',
    }
    
    async function setTag() {
      await store.multipartUpload('<file name>', '<upload file>', {
        partSize: 100 * 1024,
        headers
      });
      const tag = await store.getObjectTagging(name);
      console.log(tag);
    }
    
    
    setTag()
  • 追加上传时添加对象标签

    以下代码用于追加上传时(即通过AppendObject方法)添加对象标签:

    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B'
    }
    
    // 追加上传文件,append接口指定header时,将会为文件设置标签。
    // 只有第一次调用append接口设置的标签才会生效,后续再次调用append设置的标签不生效。
    
    async function setTag() {
      await store.append('<file name>', '<upload file>', {
        partSize: 100 * 1024,
        headers
      });
      const tag = await store.getObjectTagging(name);
      console.log(tag);
    }
    
    
    setTag()
  • 断点续传上传时添加对象标签

    以下代码用于断点续传上传时(即通过multipartUpload方法)添加对象标签:

    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B'
    }
    
    // 设置断点信息。
    const checkponit = {
      file,
      name,
      fileSize,
      partSize,
      uploadId,
      doneParts: []
    }
    
    async function setTag() {
      await store.multipartUpload('<file name>', '<upload file>', {
        checkponit,
        headers
      });
      const tag = await store.getObjectTagging(name);
      console.log(tag);
    }
    
    
    setTag()

对已上传Object添加或更改对象标签

以下代码用于对已上传Object添加或更改对象标签:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
  region: '<Your Region>',
  // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

async function putObjectTagging(objectName, tag) {
  try {
    let result = await client.putObjectTagging(objectName, tag);
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

const tag = { a: '1', b: '2' };
putObjectTagging('objectName', tag)

拷贝Object时设置对象标签

拷贝Object时,可以指定如何设置目标Object的对象标签。取值如下:
  • Copy(默认值):复制源Object的对象标签到目标 Object。
  • Replace:忽略源Object的对象标签,直接采用请求中指定的对象标签。

以下分别提供了简单拷贝1GB以下的Object、及分片拷贝1GB以上的Object时设置对象标签的详细示例。

  • 以下代码用于简单拷贝1GB以下的Object时设置对象标签:
    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B',
      // 指定如何设置目标Object的对象标签。取值为Copy或Replace。其中Copy为默认值,表示复制源Object的对象标签到目标Object。Replace表示忽略源Object的对象标签,直接采用请求中指定的对象标签。
      'x-oss-tagging-directive': 'Replace' 
    }
    
    async function setTag() {
      const targetObjectName = `${prefix}ali-sdk/oss/copy-tag.js`;
      const result = await store.copy(targetObjectName, sourceObjectName, {
        headers
      });
      const tag = await store.getObjectTagging(targetObjectName)
      console.log(tag)
    }
    
    setTag()
  • 以下代码用于分片拷贝1GB 以上的的Object时设置对象标签:
    const OSS = require('ali-oss')
    
    const client = new OSS({
      bucket: '<Your BucketName>',
      //region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
      region: '<Your Region>',
      // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
      accessKeyId: '<Your AccessKeyId>',
      accessKeySecret: '<Your AccessKeySecret>',
    });
    
    // 设置请求头信息。
    const headers = {
      'x-oss-tagging': 'TagA=A&TagB=B',
    }
    
    async function setTag() {
      await client.multipartUploadCopy(copyName, {
        sourceKey: name,
        sourceBucketName: bucket
      }, {
        partSize: 256 * 1024,
        headers
      });
      const tag = await store.getObjectTagging(targetObjectName)
      console.log(tag)
    }
    
    setTag()

为软链接文件设置标签

以下代码用于为软链接文件设置标签:

const OSS = require('ali-oss')

const client = new OSS({
  bucket: '<Your BucketName>',
  region: '<Your Region>',
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
});

// 设置请求头信息
const headers = {
  'x-oss-tagging': 'TagA=A&TagB=B'
}

async function setTag() {
  await store.putSymlink(name, targetName, {
    storageClass: 'IA',
    meta: {
      uid: '1',
      slus: 'test.html'
    },
    headers
  });
  const tag = await store.getObjectTagging(targetObjectName)
  console.log(tag)
}

setTag()