OSS支持使用对象标签(Object Tagging)对存储的Object进行分类,您可以针对同标签的Object设置生命周期规则、访问权限等。
背景信息
设置对象标签时,请注意以下事项:
- 您可以在上传Object时设置对象标签,也可以对已上传Object设置对象标签。设置对象标签时,若对象已有标签,则覆盖原标签。设置对象标签的详情请参考PutObjectTagging。
- 设置对象标签时要求请求者有PutObjectTagging权限。
- 更改标签时不会更新Object的Last‑Modified时间。
- 标签合法字符集包括大小写字母、数字、空格和以下符号:
+‑=._:/
对象标签使用一组键值对(Key-Value)来标记对象。对象标签的详情请参见对象标签。
上传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访问或日常运维,请登录RAM控制台创建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访问或日常运维,请登录RAM控制台创建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访问或日常运维,请登录RAM控制台创建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访问或日常运维,请登录RAM控制台创建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访问或日常运维,请登录RAM控制台创建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的对象标签,直接采用请求中指定的对象标签。
以下分别提供了简单拷贝1 GB以下的Object、及分片拷贝1 GB以上的Object时设置对象标签的详细示例。
- 以下代码用于简单拷贝1 GB以下的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访问或日常运维,请登录RAM控制台创建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()
- 以下代码用于分片拷贝1 GB以上的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访问或日常运维,请登录RAM控制台创建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()