削除されたオブジェクトは復元できません。実行前に、以下の保護措置を確認し、誤ってオブジェクトが削除されるのを防いでください。
OSS では、バケット内のオブジェクトを手動または自動で 1 つ以上削除できます。本ページでは、これらの両方の方法およびすべてのサポート対象ツールについて説明します。
バケットで OSS-HDFS が有効になっている場合、.dlsdata/ ディレクトリ内のオブジェクトを削除しないでください。これにより、データ損失が発生したり、OSS-HDFS サービスが不安定になる可能性があります。
削除前の確認事項
削除は完全に不可逆です。削除操作を実行する前に、以下の保護措置をご検討ください。
一括クリーンアップにはライフサイクルルールを使用します。 特定のプレフィックスや最終更新日時などの条件に合致するオブジェクトを削除する場合は、手動で削除コマンドを実行する代わりに、ライフサイクルルールを設定してください。詳細については、「ライフサイクル」をご参照ください。
削除方法
OSS では、以下の 2 種類の削除モードをサポートしています。
| モード | 使用タイミング |
|---|---|
| 手動 | コンソール、OSS API、SDK、ossbrowser、ossutil を使用して、必要に応じて特定のオブジェクトを削除します。 |
| 自動 | ライフサイクルルールを使用して、指定したプレフィックスや最終更新日時に合致するオブジェクトを削除します。 |
1 回の削除リクエストで削除できるオブジェクト数は最大 1,000 個 です。それ以上のオブジェクトを削除する場合は、複数回のリクエストを送信してください。
手動によるオブジェクトの削除
OSS コンソール
OSS コンソールにログインします。
左側のナビゲーションウィンドウで、バケット をクリックし、対象のバケットをクリックします。
左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。
OSS オブジェクトの削除
OSS オブジェクト タブで、1 つ以上のオブジェクトを選択し、オブジェクト一覧下部の 完全削除 をクリックします。
確認のため、OK をクリックします。
HDFS オブジェクトの削除
HDFS タブで、削除するオブジェクトを見つけ、操作 列の 完全削除 をクリックします。
確認のため、OK をクリックします。
HDFS タブでは一括削除はサポートされていません。HDFS オブジェクトは 1 つずつ削除してください。
ossbrowser の使用
ossbrowser を使用すると、OSS コンソールで実行可能なオブジェクトレベルの操作と同様の操作が可能です。ossbrowser の画面上の指示に従って、オブジェクトを削除してください。詳細については、「共通操作」をご参照ください。
OSS SDK
以下の例では、単一のオブジェクトを削除します。すべての例では、認証情報として環境変数を使用しています — 実行前に OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET を設定してください。
その他の言語の場合、または複数のオブジェクトを一度に削除する場合は、「概要」を参照してください。
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 {
// ご使用のリージョンのエンドポイントを指定します(例:中国 (杭州))。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数から認証情報を読み込みます。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名およびオブジェクトパス(バケット名を含めない)を指定します。
String bucketName = "examplebucket";
String objectName = "exampleobject.txt";
String region = "cn-hangzhou";
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// オブジェクトを削除します。ディレクトリを削除する場合は、事前に空にしてください。
ossClient.deleteObject(bucketName, objectName);
} catch (OSSException oe) {
System.out.println("OSS エラー: " + oe.getErrorMessage());
System.out.println("エラーコード: " + oe.getErrorCode());
System.out.println("リクエスト ID: " + oe.getRequestId());
System.out.println("ホスト ID: " + oe.getHostId());
} catch (ClientException ce) {
System.out.println("クライアントエラー: " + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Python
import argparse
import alibabacloud_oss_v2 as oss
parser = argparse.ArgumentParser(description="delete object sample")
parser.add_argument('--region', help='The region where the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The endpoint for accessing OSS.')
parser.add_argument('--key', help='The name of the object.', required=True)
def main():
args = parser.parse_args()
# 環境変数から認証情報を読み込みます。
credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()
cfg = oss.config.load_default()
cfg.credentials_provider = credentials_provider
cfg.region = args.region
if args.endpoint is not None:
cfg.endpoint = args.endpoint
client = oss.Client(cfg)
result = client.delete_object(oss.DeleteObjectRequest(
bucket=args.bucket,
key=args.key,
))
# HTTP 204 は削除成功を示します。
print(f'status code: {result.status_code},'
f' request id: {result.request_id},'
f' version id: {result.version_id},'
f' delete marker: {result.delete_marker}')
if __name__ == "__main__":
main()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
objectName string
)
func init() {
flag.StringVar(®ion, "region", "", "The region where the bucket is located.")
flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
flag.StringVar(&objectName, "object", "", "The name of the object.")
}
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")
}
if len(objectName) == 0 {
flag.PrintDefaults()
log.Fatalf("invalid parameters, object name required")
}
cfg := oss.LoadDefaultConfig().
WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
WithRegion(region)
client := oss.NewClient(cfg)
request := &oss.DeleteObjectRequest{
Bucket: oss.Ptr(bucketName),
Key: oss.Ptr(objectName),
}
result, err := client.DeleteObject(context.TODO(), request)
if err != nil {
log.Fatalf("failed to delete object: %v", err)
}
log.Printf("delete object result: %#v\n", result)
}Node.js
const OSS = require('ali-oss');
const client = new OSS({
region: 'oss-cn-hangzhou', // バケットが配置されているリージョン
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
bucket: 'examplebucket',
});
async function deleteObject() {
try {
// バケット名を除いた完全なオブジェクトパスを指定します。
const result = await client.delete('exampleobject.txt');
console.log(result);
} catch (error) {
console.log(error);
}
}
deleteObject();PHP
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use AlibabaCloud\Oss\V2 as Oss;
$optsdesc = [
"region" => ['help' => 'The region where the bucket is located.', 'required' => true],
"endpoint" => ['help' => 'The OSS endpoint.', 'required' => false],
"bucket" => ['help' => 'The name of the bucket.', 'required' => true],
"key" => ['help' => 'The name of the object.', 'required' => true],
];
$longopts = array_map(fn($key) => "$key:", array_keys($optsdesc));
$options = getopt("", $longopts);
foreach ($optsdesc as $key => $value) {
if ($value['required'] && empty($options[$key])) {
echo "Error: --$key is required. " . $value['help'] . PHP_EOL;
exit(1);
}
}
$region = $options["region"];
$bucket = $options["bucket"];
$key = $options["key"];
// 環境変数から認証情報を読み込みます。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider);
$cfg->setRegion($region);
if (isset($options["endpoint"])) {
$cfg->setEndpoint($options["endpoint"]);
}
$client = new Oss\Client($cfg);
$request = new Oss\Models\DeleteObjectRequest(bucket: $bucket, key: $key);
$result = $client->deleteObject($request);
// HTTP 204 は削除成功を示します。
printf(
'status code: %s' . PHP_EOL .
'request id: %s' . PHP_EOL,
$result->statusCode,
$result->requestId
);Browser.js
ブラウザコード内に AccessKey ペアを露出させないよう、セキュリティトークンサービス (STS) から一時的なアクセス認証情報を使用してください。一時的な認証情報には、AccessKey ID、AccessKey Secret、およびセキュリティトークンが含まれます。詳細については、「アクセス権限の付与 (Browser.js SDK)」をご参照ください。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<button id="delete">Delete</button>
<!-- OSS SDK をインポートします。 -->
<script type="text/javascript" src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
<script type="text/javascript">
const client = new OSS({
region: 'yourRegion',
authorizationV4: true,
// STS から取得した一時的な認証情報。
accessKeyId: 'yourAccessKeyId',
accessKeySecret: 'yourAccessKeySecret',
stsToken: 'yourSecurityToken',
bucket: 'examplebucket',
});
document.getElementById('delete').addEventListener('click', async () => {
// バケット名を除いた完全なオブジェクトパスを指定します。
let result = await client.delete('exampledir/exampleobject.txt');
console.log(result);
});
</script>
</body>
</html>C#
using Aliyun.OSS;
using Aliyun.OSS.Common;
var endpoint = "yourEndpoint";
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
var bucketName = "examplebucket";
var objectName = "exampledir/exampleobject.txt";
const string region = "cn-hangzhou";
var conf = new ClientConfiguration();
conf.SignatureVersion = SignatureVersion.V4;
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
client.DeleteObject(bucketName, objectName);
Console.WriteLine("Delete object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Delete object failed. {0}", ex.Message);
}Android-Java
// バケット名および完全なオブジェクトパス(バケット名を含めない)を指定します。
DeleteObjectRequest delete = new DeleteObjectRequest("examplebucket", "exampledir/exampleobject.txt");
// 非同期で削除します。
OSSAsyncTask deleteTask = oss.asyncDeleteObject(delete, new OSSCompletedCallback<DeleteObjectRequest, DeleteObjectResult>() {
@Override
public void onSuccess(DeleteObjectRequest request, DeleteObjectResult result) {
Log.d("asyncDeleteObject", "success!");
}
@Override
public void onFailure(DeleteObjectRequest 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());
}
}
});Objective-C
OSSDeleteObjectRequest *delete = [OSSDeleteObjectRequest new];
// バケット名を指定します。
delete.bucketName = @"examplebucket";
// バケット名を除いた完全なオブジェクトパスを指定します。
delete.objectKey = @"exampleobject.txt";
OSSTask *deleteTask = [client deleteObject:delete];
[deleteTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
// 削除に成功しました。
}
return nil;
}];
// タスク完了まで待機する場合は、次のコメントを解除します。
// [deleteTask waitUntilFinished];C++
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
// エンドポイント、リージョン、バケット名、オブジェクトパスを設定します。
std::string Endpoint = "yourEndpoint";
std::string Region = "yourRegion";
std::string BucketName = "examplebucket";
// フォルダを削除する場合は、ObjectName をフォルダ名に設定します。
// 削除前にフォルダは空である必要があります。
std::string ObjectName = "exampleobject.txt";
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
DeleteObjectRequest request(BucketName, ObjectName);
auto outcome = client.DeleteObject(request);
if (!outcome.isSuccess()) {
std::cout << "DeleteObject failed"
<< ", code: " << outcome.error().Code()
<< ", message: " << outcome.error().Message()
<< ", requestId: " << outcome.error().RequestId() << std::endl;
ShutdownSdk();
return -1;
}
ShutdownSdk();
return 0;
}C
#include "oss_api.h"
#include "aos_http_io.h"
const char *endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
const char *bucket_name = "examplebucket";
const char *object_name = "exampleobject.jpg";
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
options->config = oss_config_create(options->pool);
aos_str_set(&options->config->endpoint, endpoint);
// 環境変数から認証情報を読み込みます。
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;
options->config->is_cname = 0;
options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
exit(1);
}
aos_pool_t *pool;
aos_pool_create(&pool, NULL);
oss_request_options_t *oss_client_options = oss_request_options_create(pool);
init_options(oss_client_options);
aos_string_t bucket;
aos_string_t object;
aos_table_t *resp_headers = NULL;
aos_status_t *resp_status = NULL;
aos_str_set(&bucket, bucket_name);
aos_str_set(&object, object_name);
resp_status = oss_delete_object(oss_client_options, &bucket, &object, &resp_headers);
if (aos_status_is_ok(resp_status)) {
printf("delete object succeeded\n");
} else {
printf("delete object failed\n");
}
aos_pool_destroy(pool);
aos_http_io_deinitialize();
return 0;
}Ruby
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
bucket = client.get_bucket('examplebucket')
# バケット名を除いた完全なオブジェクトパスを指定します。
bucket.delete_object('exampledir/exampleobject.txt')ossutil
まず ossutil をインストールします:「ossutil のインストール」をご参照ください。
単一のオブジェクトを削除する場合:
ossutil api delete-object --bucket examplebucket --key exampleobjectすべてのオプションについては、delete-object をご参照ください。
1 回のリクエストで複数のオブジェクトを削除する場合:
ossutil api delete-multiple-objects \
--bucket examplebucket \
--delete "{\"Quiet\":\"false\",\"Object\":[{\"Key\":\"multipart.data\"},{\"Key\":\"test.jpg\"}]}"すべてのオプションについては、「複数オブジェクトの削除」をご参照ください。
API リファレンス
上記のツールは、OSS の RESTful API を基盤として構築されています。カスタムのリクエスト処理が必要なユースケースでは、API を直接呼び出してください。各リクエストには、必要な署名を含める必要があります。
| 操作 | 説明 |
|---|---|
| DeleteObject | 単一のオブジェクトを削除します |
| DeleteMultipleObjects | 1 回のリクエストで最大 1,000 個のオブジェクトを削除します |