全部產品
Search
文件中心

Object Storage Service:Node.js設定對象標籤

更新時間:Nov 01, 2024

OSS支援使用對象標籤(Object Tagging)對儲存空間(Bucket)中的檔案(Object)進行分類,您可以針對相同標籤的Object設定生命週期規則、存取權限等。

注意事項

  • 在設定物件標籤之前,請確保您已瞭解該功能。詳情請參見對象標籤

  • 本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地區的其他阿里雲產品訪問OSS,請使用內網Endpoint。關於OSS支援的Region與Endpoint的對應關係,請參見OSS地區和訪問網域名稱

  • 本文以從環境變數讀取存取憑證為例。如何配置訪問憑證,請參見Java配置訪問憑證

  • 本文以OSS網域名稱建立OSSClient為例。如果您希望通過自訂網域名、STS等方式建立OSSClient,請參見建立OSSClient

  • 僅Java SDK 3.5.0及以上版本支援設定對象標籤。

  • 要設定對象標籤,您必須具有oss:PutObjectTagging許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

上傳Object時添加對象標籤

  • 簡單上傳時添加對象標籤

    以下代碼用於簡單上傳時(即通過PutObject方法)添加對象標籤。

    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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      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
    })
  • 分區上傳時添加對象標籤

    以下代碼用於分區上傳時(即通過multipartUpload方法)添加對象標籤。

    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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      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', 
    }
    
    
    async function setTag() {
      await client.multipartUpload(objectName, localFilepath, {
        // 設定分區大小,單位為位元組。除了最後一個分區沒有大小限制,其他的分區最小為100 KB。
        partSize: 100 * 1024,
        headers
      });
      const tag = await client.getObjectTagging(objectName);
      console.log(tag);
    }
    
    setTag()
  • 追加上傳時添加對象標籤

    以下代碼用於追加上傳時(即通過AppendObject方法)添加對象標籤。

    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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      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',
    }
    
    
    // 追加上傳檔案,append介面指定header時,將會為檔案設定標籤。
    // 只有第一次調用append介面設定的標籤才會生效,後續再次調用append介面設定的標籤不生效。
    async function setTag() {
      await client.append(objectName, localFilepath, {
        // 設定分區大小,單位為位元組。除了最後一個分區沒有大小限制,其他的分區最小為100 KB。
        partSize: 100 * 1024,
        headers
      });
      const tag = await client.getObjectTagging(objectName);
      console.log(tag);
    }
    
    
    setTag()
  • 斷點續傳上傳時添加對象標籤

    以下代碼用於斷點續傳上傳時(即通過multipartUpload方法)添加對象標籤。

    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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      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'
    // 設定斷點資訊。
    letcheckpoint;
    
    // 佈建要求頭資訊。
    const headers = {
      // 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
      'x-oss-tagging': 'owner=John&type=document',
    }
    
    
    async function setTag() {
      await client.multipartUpload(objectName, localFilepath, {
        checkponit,
        async progress(percentage, cpt) {
          checkpoint = cpt;
        },
        headers
      });
      const tag = await client.getObjectTagging(objectName);
      console.log(tag);
    }
    
    setTag()

為已上傳Object添加或更改對象標籤

如果上傳Object時未添加對象標籤或者添加的對象標籤不滿足使用需求,您可以在上傳Object後為Object添加或更改對象標籤。

以下代碼用於為已上傳Object添加或更改對象標籤。

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,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

// 填寫Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如exampledir/exampleobject.txt。
const objectName = 'exampledir/exampleobject.txt'
// 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
const tag = { owner: 'John', type: 'document' };

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

putObjectTagging(objectName, tag)

為Object指定版本添加或更改對象標籤

在已開啟版本控制的Bucket中,通過指定Object的版本ID(versionId),您可以為Object指定版本添加或更改對象標籤。

以下代碼用於為Object指定版本添加或更改對象標籤。

說明

關於擷取versionId的具體操作,請參見列舉檔案

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,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

// 填寫Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如exampledir/exampleobject.txt。
const objectName = 'exampledir/exampleobject.txt'
// 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
const tag = { owner: 'John', type: 'document' };
// 填寫Object的版本ID。
constversionId='CAEQIRiBgMDqvPqA3BciIDJhMjE4MWZkN2ViYTRmYzJhZjkxMzk2YWM2NjJk****'

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

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({
      // 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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      bucket: 'yourbucketname'
    });
    
    // 填寫源Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如srcexampledir/exampleobject.txt。
    const sourceObjectName = 'srcexampledir/exampleobject.txt';
    // 填寫目標Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如destexampledir/exampleobject.txt。
    const targetObjectName = 'destexampledir/exampleobject.txt';
    
    // 佈建要求頭資訊。
    const headers = {
      // 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
      'x-oss-tagging': 'owner=John&type=document',
      // 指定如何設定目標Object的對象標籤。可選值包括Copy和Replace。預設值為Copy,Copy表示複製源Object的對象標籤到目標Object。Replace表示忽略源Object的對象標籤,直接採用請求中指定的對象標籤。
      'x-oss-tagging-directive': 'Replace' 
    }
    
    async function setTag() {
      const result = await client.copy(targetObjectName, sourceObjectName, {
        headers
      });
      const tag = await client.getObjectTagging(targetObjectName)
      console.log(tag)
    }
    
    setTag()
  • 分區拷貝時添加對象標籤

    以下代碼用於分區拷貝1 GB以上的Object時設定對象標籤。

    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,
      authorizationV4: true,
      // 填寫儲存空間名稱。
      bucket: 'yourbucketname'
    });
    
    // 填寫源Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如srcexampledir/exampleobject.txt。
    const sourceObjectName = 'srcexampledir/exampleobject.txt'
    // 填寫目標Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如destexampledir/exampleobject.txt。
    const targetObjectName = 'destexampledir/exampleobject.txt'
    
    // 佈建要求頭資訊。
    const headers = {
      // 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
      'x-oss-tagging': 'owner=John&type=document',
    }
    
    async function setTag() {
      await client.multipartUploadCopy(targetObjectName, {
        sourceKey: sourceObjectName,
        sourceBucketName: 'examplebucket'
      }, {
        // 設定分區大小,單位為位元組。除了最後一個分區沒有大小限制,其他的分區最小為100 KB。
        partSize: 256 * 1024,
        headers
      });
      const tag = await client.getObjectTagging(targetObjectName)
      console.log(tag)
    }
    
    setTag()

為軟連結檔案設定標籤

以下代碼用於為軟連結檔案設定標籤。

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,
  authorizationV4: true,
  // 填寫儲存空間名稱。
  bucket: 'yourbucketname'
});

// 填寫軟連結完整路徑,例如shortcut/myobject.txt。
const symLink = "shortcut/myobject.txt";
// 填寫Object完整路徑,Object完整路徑中不能包含Bucket名稱。例如exampledir/exampleobject.txt。
const targetObjectName = 'exampledir/exampleobject.txt'
                
// 佈建要求頭資訊。
const headers = {
  // 依次填寫對象標籤的鍵(例如owner)和值(例如John)。
  'x-oss-tagging': 'owner=John&type=document',
}

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

setTag()

相關文檔

  • 關於設定對象標籤的完整範例程式碼,請參見GitHub樣本

  • 關於設定對象標籤的API介面說明,請參見PutObjectTagging