全部產品
Search
文件中心

Object Storage Service:刪除儲存空間以停止計費

更新時間:Sep 17, 2025

當儲存空間(Bucket)不再需要或希望停止計費時,應刪除該Bucket。由於OSS的費用主要來源於Bucket內部資源,而刪除Bucket前系統強制要求清空所有內部資源,因此刪除Bucket是確保您不會遺漏任何計費資源而產生意外費用的最可靠方式。請注意,刪除後資料無法恢複,且Bucket名稱釋放後存在被他人佔用的風險。若要完全停用整個OSS服務,則需刪除您帳號下的所有Bucket。

刪除前必讀

關鍵風險提醒

風險類型

說明

預防措施

資料不可恢複

刪除後所有資料永久丟失

重要資料必須提前備份

名稱佔用風險

刪除後4-8小時內名稱可能被他人佔用

如需保留名稱,建議清空Bucket內容而非刪除Bucket

業務中斷風險

正在使用的應用可能受影響

確認無業務依賴後在操作

同步刪除風險

若Bucket 配置了增/刪/改同步的跨/同地區複製規則,目標Bucket也會同步刪除檔案

檢查複製配置,確認影響範圍

安全檢查清單

在執行刪除前,請確認以下事項:

  • 資料備份:重要資料已完成備份並驗證可用性

  • 業務確認:確認沒有應用或服務正在使用此Bucket

  • 許可權驗證:確認目前使用者具有刪除許可權

  • 團隊通知:已通知相關團隊成員此刪除操作

  • 時間選擇:選擇合適的維護時間視窗執行

檢查必須刪除的資源

如果Bucket中殘留檔案片段存取點加速器RTMP推流地址等一種或多種必須刪除的資源沒有清理,在刪除 Bucket 時將出現“儲存空間不為空白”的報錯。建議使用 OSS 控制台刪除嚮導,自動掃描並列出所有待清理項。

  1. 登入OSS管理主控台

  2. 單擊Bucket 列表,然後單擊目標Bucket名稱。

  3. 下滑左側導覽列至底部,單擊移除Bucket

  4. 移除Bucket頁面,單擊刪除Bucket按鈕,可以看到檢測出的待清理項。

    image

清理必須刪除的資源

根據系統檢測出的資源類型進行清理。檔案量較大時,推薦使用生命週期規則自動處理。

清理檔案

檔案資源的狀態列提示已開啟 HDFS 功能,請先清理HDFS 檔案。若已開啟版本控制,OSS檔案清單會同時顯示目前的版本與歷史版本,因此執行全選刪除時會一併刪除所有版本檔案。

OSS檔案

使用OSS控制台

  1. 移除Bucket頁面單擊刪除Bucket,找到檔案資源項,單擊前往刪除

  2. 選中所有Object,單擊下方的徹底刪除

  3. 在彈出的對話方塊中,單擊確定

使用ossutil

刪除該bucket下所有檔案(包括目前的版本和歷史版本)

ossutil rm oss://examplebucket/ -r

更多樣本,請參見rm(刪除)

HDFS檔案

通過OSS控制台的方式

  1. 檔案資源的狀態列單擊立即暫停,停止HDFS背景工作。

  2. 單擊前往刪除,進入HDFS頁簽。

  3. 逐個單擊徹底刪除,直至清空所有HDFS檔案。

通過HDFS Shell命令的方式

hdfs dfs -rm -r -skipTrash oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/*

更多資訊,請參見通過HDFS Shell命令執行OSS-HDFS服務快速入門常見操作。

清理片段

使用OSS控制台

  1. 移除Bucket頁面單擊刪除Bucket,找到片段資源項,單擊前往刪除

  2. 檔案清單頁面,單擊片段管理

  3. 片段管理(Multipart)面板,單擊刪除所有

  4. 在彈出的對話方塊中,單擊確定

使用ossutil

刪除未完成或未取消上傳的所有分區片段。

ossutil rm oss://examplebucket -m -r -f

更多資訊,請參見rm(刪除)

清理存取點

  1. 單擊左側導覽列的存取點

  2. 逐個單擊刪除存取點

  3. 按指引刪除對應存取原則。

  4. 刪除存取原則後,回到存取點列表。按頁面引導輸入存取點名稱,單擊確定完成刪除。

清理加速器

請注意,刪除加速器僅會清除加速器內緩衝的資料,儲存在OSS桶中的資料不會受到影響。

  1. 單擊左側導覽列的Bucket配置 > 加速器

  2. 在OSS加速器列表操作列單擊刪除按鈕。

  3. 按頁面引導輸入加速器名稱,單擊確定完成刪除。

    image

清理RTMP推流地址

Bucket的LiveChannel查看和刪除暫不支援通過工具和控制台操作,可以使用介面或者是SDK來實現操作,請參見DeleteLiveChannel,刪除指定的LiveChannel。範例程式碼如下:

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.LiveChannelGenericRequest;

/**
 * 刪除指定的LiveChannel範例程式碼
 * 該程式示範如何刪除阿里雲OSS中的LiveChannel
 */

public class Demo {

    public static void main(String[] args) throws Exception {
        // OSS服務地址,根據實際地區選擇對應的Endpoint,此處以杭州地區為例。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫LiveChannel名稱。
        String liveChannelName = "yourLiveChannelName";
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-hangzhou";

        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 建立刪除LiveChannel的請求
            LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
            // 執行刪除操作
            ossClient.deleteLiveChannel(request);
        } catch (OSSException oe) {
            // 處理OSS服務端返回的異常
            oe.printStackTrace();
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (Exception e) {
            System.out.println("Caught an unexpected exception:");
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                // 釋放OSSClient資源
                ossClient.shutdown();
            }
        }
    }
}

刪除Bucket

清空Bucket內的必刪資源,才能刪除Bucket本身。

使用OSS控制台

  1. 返回目標 Bucket 的刪除 Bucket頁面。

  2. 單擊刪除Bucket,按頁面引導輸入Bucket名稱,單擊確定完成刪除。

ossutil

以下命令用於刪除儲存空間examplebucket

ossutil api delete-bucket --bucket examplebucket

更多資訊,請參見delete-bucket

OSS SDK

以下僅列舉常見SDK的刪除Bucket的程式碼範例。關於其他SDK的刪除Bucket的程式碼範例,請參見SDK簡介

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填寫Bucket名稱,例如examplebucket。
        String bucketName = "examplebucket";
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou。
        String region = "cn-hangzhou";

        // 建立OSSClient執行個體。
        // 當OSSClient執行個體不再使用時,調用shutdown方法以釋放資源。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // 刪除儲存空間。
            ossClient.deleteBucket(bucketName);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 

Node.js

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名稱。
  bucket: 'yourBucketName',
});

async function deleteBucket() {
  try {
    // 指定儲存空間名稱。
    const result = await client.deleteBucket('yourbucketname');
    console.log(result);
  } catch (err) {
    console.log(err);
  }
}

deleteBucket();

.NET

using System;
using Aliyun.OSS;
using Aliyun.OSS.Common;


namespace Samples
{
    public class Program
    {
        public static void Main(string[] args)
        {
            // yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
            var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // 填寫Bucket名稱,例如examplebucket。
            var bucketName = "examplebucket314";
            // 填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。
            const string region = "cn-hangzhou";
            // 建立ClientConfiguration執行個體,按照您的需要修改預設參數。
            var conf = new ClientConfiguration();
            // 設定v4簽名。
            conf.SignatureVersion = SignatureVersion.V4;

            // 建立OssClient執行個體。
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
            client.SetRegion(region);
            
            try
            {
                client.DeleteBucket(bucketName);

                Console.WriteLine("Delete bucket succeeded");
            }
            catch (Exception ex)
            {
                Console.WriteLine("Delete bucket failed. {0}", ex.Message);
            }
        }
    }
}

Android

DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest("bucketName");

// 非同步刪除儲存空間。
OSSAsyncTask deleteBucketTask = oss.asyncDeleteBucket(deleteBucketRequest, new OSSCompletedCallback<DeleteBucketRequest, DeleteBucketResult>() {
    @Override
    public void onSuccess(DeleteBucketRequest request, DeleteBucketResult result) {
        Log.d("asyncDeleteBucket", "Success!");
    }
    @Override
    public void onFailure(DeleteBucketRequest request, ClientException clientException, ServiceException serviceException) {
        // 請求異常。
        if (clientException != null) {
            // 本地異常,如網路異常等。
            clientException.printStackTrace();
        }
        if (serviceException != null) {
            // 服務異常。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

iOS

OSSDeleteBucketRequest * delete = [OSSDeleteBucketRequest new];
// 填寫儲存空間名稱,例如examplebucket。
delete.bucketName = @"examplebucket";
OSSTask * deleteTask = [client deleteBucket:delete];
[deleteTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"delete bucket success!");
    } else {
        NSLog(@"delete bucket failed, error: %@", task.error);
    }
    return nil;
}];
// 實現同步阻塞等待任務完成。
// [getdeleteTask waitUntilFinished];

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /*初始化OSS帳號資訊。*/
    
    /*yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
    std::string Endpoint = "yourEndpoint";
    
    / *yourRegion填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn - hangzhou。 * /
    std::string Region = "yourRegion";
    
    /*填寫Bucket名稱,例如examplebucket。*/
    std::string BucketName = "examplebucket";

    /*初始化網路等資源。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /*刪除Bucket。*/
    DeleteBucketRequest request(BucketName);
   
    auto outcome = client.DeleteBucket(request);

    if (outcome.isSuccess()) {
    std::cout << "Delete bucket successfully." << std::endl;
    } else {
    std::cout << "Failed to delete bucket. Error code: " << outcome.error().Code()
              << ", Message: " << outcome.error().Message()
              << ", RequestId: " << outcome.error().RequestId() << std::endl;
    }

    /*釋放網路等資源。*/
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint填寫Bucket所在地區對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。*/
const char *endpoint = "yourEndpoint";

/* 填寫Bucket名稱,例如examplebucket。*/
const char *bucket_name = "examplebucket";
/* yourRegion填寫Bucket所在地區對應的Region。以華東1(杭州)為例,Region填寫為cn-hangzhou。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* 用char*類型的字串初始化aos_string_t類型。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    //需要額外配置以下兩個參數
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* 是否使用CNAME網域名稱訪問OSS服務。0表示不使用。*/
    options->config->is_cname = 0;
    /* 設定網路相關參數,比如逾時時間等。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* 在程式入口調用aos_http_io_initialize方法來初始化網路、記憶體等全域資源。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* 用於記憶體管理的記憶體池(pool),等價於apr_pool_t。其實現代碼在apr庫中。*/
    aos_pool_t *pool;
    /* 重新建立一個記憶體池,第二個參數是NULL,表示沒有繼承其它記憶體池。*/
    aos_pool_create(&pool, NULL);
    /* 建立並初始化options,該參數包括endpoint、access_key_id、acces_key_secret、is_cname、curl等全域配置資訊。*/
    oss_request_options_t *oss_client_options;
    /* 在記憶體池中分配記憶體給options。*/
    oss_client_options = oss_request_options_create(pool);
    /* 初始化Client的選項oss_client_options。*/
    init_options(oss_client_options);
    /* 初始化參數。*/
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    /* 將char*類型資料賦值給aos_string_t類型的儲存空間。*/
    aos_str_set(&bucket, bucket_name);
    /* 刪除儲存空間。*/
    resp_status = oss_delete_bucket (oss_client_options, &bucket, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("delete bucket succeeded\n");
    } else {
        printf("delete bucket failed\n");
    }
    /* 釋放記憶體池,相當於釋放了請求過程中各資源分派的記憶體。*/
    aos_pool_destroy(pool);
    /* 釋放之前分配的全域資源。*/
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 從環境變數中擷取訪問憑證。運行本程式碼範例之前,請確保已設定環境變數OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填寫Bucket名稱,例如examplebucket。
client.delete_bucket('examplebucket')

Go

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	// 定義命令列參數,用於指定地區和儲存空間名稱
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	// 解析命令列參數
	flag.Parse()

	// 檢查儲存空間名稱參數是否為空白
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// 檢查地區參數是否為空白
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// 載入預設配置並設定憑證提供者和地區
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// 建立OSS用戶端
	client := oss.NewClient(cfg)

	// 建立刪除儲存空間請求對象
	request := &oss.DeleteBucketRequest{
		Bucket: oss.Ptr(bucketName),
	}

	// 調用DeleteBucket方法刪除儲存空間
	result, err := client.DeleteBucket(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket %v", err)
	}

	// 列印刪除結果
	log.Printf("delete bucket result:%#v\n", result)
}

Python

import argparse
import alibabacloud_oss_v2 as oss

# 建立命令列參數解析器,描述此指令碼用於刪除指定的OSS Bucket。
parser = argparse.ArgumentParser(description="Delete a specified OSS bucket.")

# 添加命令列參數 --region,表示儲存空間所在的地區,必需參數
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# 添加命令列參數 --bucket,表示儲存空間的名稱,必需參數
parser.add_argument('--bucket', help='The name of the bucket to delete.', required=True)

# 添加命令列參數 --endpoint,表示其他服務可用來訪問OSS的網域名稱,非必需參數
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS.')

def main():
    """
    主函數,用於解析命令列參數並執行刪除指定Bucket的操作。
    """

    args = parser.parse_args()  # 解析命令列參數

    # 從環境變數中載入憑證資訊,用於身分識別驗證
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的預設配置,並設定憑證提供者和地區資訊
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region

    # 如果提供了endpoint參數,則設定配置中的endpoint
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置好的資訊建立OSS用戶端
    client = oss.Client(cfg)

    # 構造請求以刪除指定的Bucket
    request = oss.DeleteBucketRequest(bucket=args.bucket)
   
    try:
        # 發送請求並擷取響應結果
        result = client.delete_bucket(request)

        # 列印響應結果的狀態代碼和請求ID
        print(f'status code: {result.status_code},'
              f' request id: {result.request_id}')
    except oss.exceptions.OssError as e:
        # 捕獲並列印可能發生的異常
        print(f"Failed to delete bucket: {e}")

if __name__ == "__main__":
    main()  # 指令碼入口,當檔案被直接運行時調用main函數
  

PHP

<?php

require_once __DIR__ . '/../vendor/autoload.php'; // 引入自動負載檔案,載入依賴庫

use AlibabaCloud\Oss\V2 as Oss;

// 定義命令列參數描述
$optsdesc = [
    "region" => ['help' => 'The region in which the bucket is located.', 'required' => True], // 地區是必填項,儲存空間所在的地區,例如 oss-cn-hangzhou。
    "endpoint" => ['help' => 'The domain names that other services can use to access OSS.', 'required' => False], // 終端節點是可選項,其他服務可以用來訪問OSS的網域名稱。
    "bucket" => ['help' => 'The name of the bucket', 'required' => True], // 儲存空間名稱是必填項。
];
$longopts = \array_map(function ($key) {
    return "$key:"; // 每個參數後面加冒號,表示需要值
}, array_keys($optsdesc));

// 解析命令列參數
$options = getopt("", $longopts); 

// 檢查必填參數是否缺失
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help'];
        echo "Error: the following arguments are required: --$key, $help"; // 提示使用者缺少必填參數
        exit(1); 
    }
}

// 擷取命令列參數值
$region = $options["region"]; // 儲存空間所在地區。
$bucket = $options["bucket"]; // 儲存空間名稱。

// 使用環境變數載入憑證資訊(AccessKeyId 和 AccessKeySecret)
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider(); 

// 使用SDK的預設配置
$cfg = Oss\Config::loadDefault(); // 載入SDK的預設配置。
$cfg->setCredentialsProvider($credentialsProvider); // 設定憑證提供者。
$cfg->setRegion($region); // 設定地區。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // 如果提供了終端節點,則設定終端節點。
}

// 建立OSS用戶端執行個體
$client = new Oss\Client($cfg); 

// 建立刪除儲存空間的請求對象
$request = new Oss\Models\DeleteBucketRequest($bucket); 

// 調用deleteBucket方法刪除儲存空間
$result = $client->deleteBucket($request); 

// 列印返回結果
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP響應狀態代碼。
    'request id:' . $result->requestId // 請求的唯一標識。
);

自動清理海量檔案和片段

若Bucket內檔案量極大,手動清理耗時過長,可配置生命週期規則讓系統自動清理。請注意,檔案刪除操作無法復原,操作前務必謹慎。如對生命週期規則不熟悉,建議先在測試Bucket中進行驗證。

Bucket未開啟版本控制

對於未開啟版本控制的Bucket,只需要配置一條生命週期規則,即可自動快速清理所有檔案和片段(Multipart Upload產生的未合并片段)。

  1. 登入OSS管理主控台的Bucket列表頁面,找到目標Bucket。

  2. 在左側導覽列,選擇資料安全 > 版本控制,確認Bucket未開啟版本控制。

    未開啟版本控制

  3. 在左側導覽列,選擇資料管理 > 生命週期,設定生命週期規則,指定Bucket內所有檔案在最後一次修改後1天自動刪除,同時對產生時間早於1天的檔案片段,自動執行清理操作。

    screenshot_2025-07-01_17-59-32

Bucket已開啟版本控制

Bucket開啟版本控制後,會產生目前的版本檔案、歷史版本檔案、片段檔案和刪除標記。只需要配置一條生命週期規則,即可自動快速清理這些檔案。

  1. 登入OSS管理主控台的Bucket列表頁面,找到目標Bucket。

  2. 在左側導覽列,選擇資料安全 > 版本控制,確認Bucket已開啟版本控制。

    screenshot_2025-07-02_10-58-23

  3. 在左側導覽列,選擇資料管理 > 生命週期,設定生命週期規則,指定Bucket內所有目前的版本、歷史版本檔案在最後一次修改後1天自動刪除,同時對產生時間早於1天的檔案片段,自動執行清理操作。該規則會同步清理刪除標記。

    screenshot_2025-07-02_10-58-23

常見問題

刪除時提示“Bucket不為空白”怎麼辦?

Bucket內還有資源未清理。建議通過OSS控制台查看當前剩餘資源,然後參照清理必須刪除的資源進行清理,清理完畢後重試刪除Bucket。

刪除後如何立即重建同名Bucket?

刪除Bucket後,Bucket名稱在刪除後有4-8小時的冷卻期,無法立即同名重建。如果業務緊急,請使用新的Bucket名稱。

冷卻期結束後,任何使用者都可以建立該名稱的Bucket。如果未及時重新建立,存在被其他使用者搶先註冊的風險。

如何大量刪除多個Bucket?

警告

大量刪除是一項高風險操作,可能導致大量資料永久丟失。執行前,請務必再三確認待刪除的Bucket列表,並完成所有必要的資料備份。

控制台不提供大量刪除功能,您需要通過編寫自動化指令碼(如Shell、Python等)並結合ossutil命令列工具來完成。

其核心實現原理如下:

  1. 準備清單:建立一個準確無誤的、包含所有待刪除Bucket名稱的文字檔或列表。

  2. 迴圈執行:您的指令碼需要遍曆這個清單,對每一個Bucket名稱執行以下兩個關鍵步驟。

    1. 清空資源:為當前Bucket調用ossutil的清空命令。

    2. 刪除空Bucket:在確認上一步成功後,再調用ossutil的刪除Bucket命令。

刪除時提示“許可權不足”怎麼辦?

刪除Bucket前需先清理內部資源,清理過程中涉及列舉(list)和刪除(delete)等多項許可權,建議聯絡管理員一次性為您的RAM身份授予AliyunOSSFullAccess許可權,避免因許可權點遺漏導致刪除失敗。

如何徹底停止OSS計費?

刪除您帳號下所有的Bucket。

誤刪除Bucket後是否可以恢複?

不能。 刪除操作無法復原,請務必先備份再刪除。