全部產品
Search
文件中心

Object Storage Service:Node.js刪除檔案

更新時間:Nov 01, 2024

本文介紹如何在受版本控制的儲存空間(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();

相關文檔