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。