本文介紹如何在受版本控制的儲存空間(Bucket)中刪除單個或多個檔案(Object))以及指定首碼的(Prefix)的檔案。
版本控制下的刪除行為
版本控制下的刪除行為說明如下:
未指定versionId(臨時刪除):
如果在未指定versionId的情況下執行刪除操作時,預設不會刪除Object的目前的版本,而是對目前的版本插入刪除標記(Delete Marker)。當執行GetObject操作時,OSS會檢測到目前的版本為刪除標記,並返回
404 Not Found
。此外,響應中會返回header:x-oss-delete-marker = true
以及新產生的刪除標記的版本號碼x-oss-version-id
。x-oss-delete-marker
的值為true,表示與返回的x-oss-version-id
對應的版本為刪除標記。指定versionId(永久刪除):
如果在指定versionId的情況下執行刪除操作時,OSS會根據
params
中指定的versionId
參數永久刪除該版本。如果要刪除ID為“null”的版本,請在params
參數中添加params['versionId'] = “null”
,OSS將“null”字串當成“null”的versionId,從而刪除versionId為“null”的Object。
刪除單個檔案
以下提供了永久刪除及臨時刪除單個Object的樣本。
永久刪除
以下代碼用於指定versionId對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的versionId。 const versionId = "versionId"; // 指定Object。 const objectName = "exampleobject.txt"; async function deleteVersionObject() { const result = await client.delete(objectName, { versionId, }); console.log(result); } deleteVersionObject();
臨時刪除
以下代碼用於不指定versionId對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, // yourbucketname填寫儲存空間名稱。 bucket: 'yourbucketname' }); // 不指定versionId對Object進行臨時刪除,此操作會為Object添加刪除標記。 // 指定Object。 const objectName = "exampleobject.txt"; async function deleteObject() { const result = await client.delete(objectName); console.log(result); } deleteObject();
刪除多個檔案
以下提供了永久刪除以及臨時刪除多個Object的樣本。
永久刪除
以下代碼用於指定versionId對多個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' }); // 刪除多個指定versionId的Object,或刪除指定versionId的刪除標記關聯的Object。 const names = [ { key: 'key1.js', versionId: 'versionId1' }, { key: 'key2.js', versionId: 'versionId2' } ]; async function deleteMulti() { const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
臨時刪除
以下代碼用於不指定versionId對多個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, // yourbucketname填寫儲存空間名稱。 bucket: 'yourbucketname' }); const names = ['key1.js', 'key2.js']; async function deleteMulti() { // 不指定versionId刪除多個Object。 const result = await client.deleteMulti(names); console.log(result); } deleteMulti();
刪除指定首碼的檔案
以下代碼用於刪除指定首碼的檔案:
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的首碼。
const prefix = "test";
async function deleteMutiPrefix() {
// 擷取指定首碼的Object的versionId資訊。
const list = await client.getBucketVersions({
prefix: prefix,
});
for (let i = 0; i < list.objects.length; i++) {
const obj = list.objects[i];
// 刪除指定首碼的Object。
const versionId = obj.versionId;
await client.delete(obj.name, {
versionId,
});
}
}
deleteMutiPrefix();
相關文檔
關於刪除單個檔案的API介面說明,請參見DeleteObject。
關於刪除多個檔案的API介面說明,請參見DeleteMultipleObjects。