本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
当存储空间(Bucket)不再需要或希望停止计费时,应删除该Bucket。由于OSS的费用主要来源于Bucket内部资源,而删除Bucket前系统强制要求清空所有内部资源,因此删除Bucket是确保您不会遗漏任何计费资源而产生意外费用的最可靠方式。请注意,删除后数据无法恢复,且Bucket名称释放后存在被他人占用的风险。若要完全停用整个OSS服务,则需删除您账号下的所有Bucket。
删除前必读
关键风险提醒
风险类型 | 说明 | 预防措施 |
数据不可恢复 | 删除后所有数据永久丢失 | 重要数据必须提前备份 |
名称占用风险 | 删除后4-8小时内名称可能被他人占用 | 如需保留名称,建议清空Bucket内容而非删除Bucket |
业务中断风险 | 正在使用的应用可能受影响 | 确认无业务依赖后在操作 |
同步删除风险 | 若Bucket 配置了增/删/改同步的跨/同区域复制规则,目标Bucket也会同步删除文件 | 检查复制配置,确认影响范围 |
安全检查清单
在执行删除前,请确认以下事项:
数据备份:重要数据已完成备份并验证可用性
业务确认:确认没有应用或服务正在使用此Bucket
权限验证:确认当前用户具有删除权限
团队通知:已通知相关团队成员此删除操作
时间选择:选择合适的维护时间窗口执行
检查必须删除的资源
如果Bucket中残留文件、碎片、接入点、加速器或RTMP推流地址等一种或多种必须删除的资源没有清理,在删除 Bucket 时将出现“存储空间不为空”的报错。建议使用 OSS 控制台删除向导,自动扫描并列出所有待清理项。
登录OSS管理控制台。
单击Bucket 列表,然后单击目标Bucket名称。
下滑左侧导航栏至底部,单击删除Bucket。
在删除Bucket页面,可以看到检测出的待清理项。
清理必须删除的资源
根据系统检测出的资源类型进行清理。文件量较大时,推荐使用生命周期规则自动处理。
清理文件
若文件资源的状态列提示已开启 HDFS 功能,请先清理HDFS 文件。若已开启版本控制,OSS文件列表会同时显示当前版本与历史版本,因此执行全选删除时会一并删除所有版本文件。
OSS文件
使用OSS控制台
在删除Bucket页面的清空任务区域,找到文件资源项,单击前往删除。
选中所有Object,单击下方的彻底删除。
在弹出的对话框中,单击确定。
使用ossutil
删除该bucket下所有文件(包括当前版本和历史版本)
ossutil rm oss://examplebucket/ -r
更多示例,请参见rm(删除)。
HDFS文件
通过OSS控制台的方式
在文件资源的状态列单击立即暂停,停止HDFS后台任务。
单击前往删除,进入HDFS页签。
逐个单击彻底删除,直至清空所有HDFS文件。
通过HDFS Shell命令的方式
hdfs dfs -rm -r -skipTrash oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/*
清理碎片
使用OSS控制台
在删除Bucket页面的清空任务区域,找到碎片资源项,单击前往删除。
在文件列表页面,单击碎片管理。
在碎片管理(Multipart)面板,单击删除所有。
在弹出的对话框中,单击确定。
使用ossutil
删除未完成或未取消上传的所有分片碎片。
ossutil rm oss://examplebucket -m -r -f
更多信息,请参见rm(删除)。
清理接入点
在删除Bucket页面的清空任务区域,找到接入点资源项,单击前往删除。
逐个单击删除接入点。
按指引删除对应访问策略。
删除访问策略后,回到接入点列表。按页面引导输入接入点名称,单击确定完成删除。
清理加速器
请注意,删除加速器仅会清除加速器内缓存的数据,存储在OSS桶中的数据不会受到影响。
在删除Bucket页面的清空任务区域,找到加速器资源项,单击前往删除。
在OSS加速器列表操作列单击删除按钮。
按页面引导输入加速器名称,单击确定完成删除。
清理RTMP推流地址
Bucket的LiveChannel查看和删除暂不支持通过工具和控制台操作,可以使用接口或者是SDK来实现操作,请参见DeleteLiveChannel,删除指定的LiveChannel。示例代码如下:
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CreateLiveChannelRequest;
import com.aliyun.oss.model.CreateLiveChannelResult;
import com.aliyun.oss.model.ListLiveChannelsRequest;
import com.aliyun.oss.model.LiveChannelGenericRequest;
import com.aliyun.oss.model.LiveChannelListing;
import com.aliyun.oss.model.LiveChannelStatus;
import com.aliyun.oss.model.LiveChannelTarget;
import com.aliyun.oss.model.LiveChannel;
import com.aliyun.oss.common.auth.*;
public class DeleteLiveChannel {
private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
private static final/**
* 通过环境变量获取访问凭证
*/private static final EnvironmentVariableCredentialsProvider CREDENTIALS_PROVIDER = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
private static String bucketName = "bucktname";
public static void createLiveChannel() {
// 创建OSSClient实例。// 当OSSClient实例不再使用时,调用shutdown方法以释放资源。String liveChannelName = "liveChannelName1";
OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
CreateLiveChannelRequest request = new CreateLiveChannelRequest(bucketName,
liveChannelName, "desc", LiveChannelStatus.Enabled, new LiveChannelTarget());
CreateLiveChannelResult result = oss.createLiveChannel(request);
//获取推流地址。
List<String> publishUrls = result.getPublishUrls();
for (String item : publishUrls) {
System.out.println(item);
}
//获取播放地址。
List<String> playUrls = result.getPlayUrls();
for (String item : playUrls) {
System.out.println(item);
}
oss.shutdown();
}
public static void listLiveChannels() {
// 创建OSSClient实例。OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
ListLiveChannelsRequest request = new ListLiveChannelsRequest(bucketName);
LiveChannelListing liveChannelListing = oss.listLiveChannels(request);
List<LiveChannel> list = liveChannelListing.getLiveChannels();
for(LiveChannel i:list){
deleteLiveChannel(i.getName());
}
oss.shutdown();
}
public static void deleteLiveChannel(String liveChannelName) {
// 创建OSSClient实例。OSS oss = new OSSClientBuilder().build(endpoint, CREDENTIALS_PROVIDER);
LiveChannelGenericRequest request = new LiveChannelGenericRequest(bucketName, liveChannelName);
System.out.println("Delete liveChanne "+liveChannelName+" Done");
try {
oss.deleteLiveChannel(request);
} catch (OSSException ex) {
ex.printStackTrace();
} catch (ClientException ex) {
ex.printStackTrace();
} finally {
oss.shutdown();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DeleteLiveChannel.listLiveChannels();
}
}
删除Bucket
清空Bucket内的必删资源,才能删除Bucket本身。
使用OSS控制台
返回目标 Bucket 的删除 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(®ion, "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产生的未合并碎片)。
登录OSS管理控制台的Bucket列表页面,找到目标Bucket。
在左侧导航栏,选择
,确认Bucket未开启版本控制。在左侧导航栏,选择
,设置生命周期规则,指定Bucket内所有文件在最后一次修改后1天自动删除,同时对生成时间早于1天的文件碎片,自动执行清理操作。
Bucket已开启版本控制
Bucket开启版本控制后,会产生当前版本文件、历史版本文件、碎片文件和删除标记。只需要配置一条生命周期规则,即可自动快速清理这些文件。
登录OSS管理控制台的Bucket列表页面,找到目标Bucket。
在左侧导航栏,选择
,确认Bucket已开启版本控制。在左侧导航栏,选择
,设置生命周期规则,指定Bucket内所有当前版本、历史版本文件在最后一次修改后1天自动删除,同时对生成时间早于1天的文件碎片,自动执行清理操作。该规则会同步清理删除标记。
常见问题
删除时提示“Bucket不为空”怎么办?
Bucket内还有资源未清理。建议通过OSS控制台查看当前剩余资源,然后参照清理必须删除的资源进行清理,清理完毕后重试删除Bucket。
删除后如何立即重建同名Bucket?
删除Bucket后,Bucket名称在删除后有4-8小时的冷却期,无法立即同名重建。如果业务紧急,请使用新的Bucket名称。
冷却期结束后,任何用户都可以创建该名称的Bucket。如果未及时重新创建,存在被其他用户抢先注册的风险。
如何批量删除多个Bucket?
批量删除是一项高风险操作,可能导致大量数据永久丢失。执行前,请务必再三确认待删除的Bucket列表,并完成所有必要的数据备份。
控制台不提供批量删除功能,您需要通过编写自动化脚本(如Shell、Python等)并结合ossutil命令行工具来完成。
其核心实现原理如下:
准备清单:创建一个准确无误的、包含所有待删除Bucket名称的文本文件或列表。
循环执行:您的脚本需要遍历这个清单,对每一个Bucket名称执行以下两个关键步骤。
清空资源:为当前Bucket调用ossutil的清空命令。
删除空Bucket:在确认上一步成功后,再调用ossutil的删除Bucket命令。
删除时提示“权限不足”怎么办?
删除Bucket前需先清理内部资源,清理过程中涉及列举(list)和删除(delete)等多项权限,建议联系管理员一次性为您的RAM身份授予AliyunOSSFullAccess权限,避免因权限点遗漏导致删除失败。
如何彻底停止OSS计费?
删除您账号下所有的Bucket。
误删除Bucket后是否可以恢复?
不能。 删除操作不可逆,请务必先备份再删除。