このトピックでは、バージョン管理されたバケットから単一のオブジェクト、複数のオブジェクト、および名前に指定されたプレフィックスを含むオブジェクトを削除する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用しています。 OSS と同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用します。 OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject
権限が必要です。 詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
バージョン管理が有効なバケットでの削除操作
バージョン管理が有効なバケットからオブジェクトを削除する場合は、リクエストでバージョン ID を指定するかどうかを決定する必要があります。
バージョン ID を指定せずにオブジェクトを削除する (一時的な削除)
デフォルトでは、リクエストで削除するオブジェクトのバージョン ID を指定しない場合、OSS はオブジェクトの現在のバージョンを削除せず、削除マーカーをオブジェクトに最新バージョンとして追加します。 GetObject 操作をオブジェクトに対して実行すると、OSS はオブジェクトの現在のバージョンを削除マーカーとして識別し、
404 Not Found
を返します。 さらに、header:x-oss-delete-marker = true
と、削除マーカーのバージョン ID を示すx-oss-version-id
がレスポンスに含まれます。x-oss-delete-marker
の値が true の場合、x-oss-version-id
の値は削除マーカーのバージョン ID です。バージョン ID を指定してオブジェクトを削除する (完全な削除)
リクエストで削除するオブジェクトのバージョン ID を指定した場合、OSS は
params
で指定されたversionId
パラメーターに基づいて、指定されたバージョンのオブジェクトを完全に削除します。 ID が null のバージョンを削除するには、params['versionId'] = "null"
をparams
に追加します。 OSS は文字列 "null" を削除するバージョンの ID として識別し、ID が null のバージョンを削除します。
単一オブジェクトの削除
次の例は、バージョン管理されたバケットから単一オブジェクトを完全にまたは一時的に削除する方法を示しています。
完全な削除
次のサンプルコードは、リクエストでオブジェクトのバージョン ID を指定することにより、バージョン管理されたバケットからオブジェクトバージョンを完全に削除する例を示しています。
using Aliyun.OSS; using Aliyun.OSS.Common; // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "yourEndpoint"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // バケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 var objectName = "exampledir/exampleobject.txt"; // オブジェクトまたは削除マーカーのバージョン ID を指定します。 var versionid = "yourObjectVersionidOrDelMarkerVersionid"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 { // 削除するオブジェクトまたは削除マーカーのバージョン ID を指定します。 var request = new DeleteObjectRequest(bucketName, objectName) { VersionId = versionid }; client.DeleteObject(request); Console.WriteLine("オブジェクトの削除に成功しました"); } catch (Exception ex) { Console.WriteLine("オブジェクトの削除に失敗しました。{0}", ex.Message); }
一時的な削除
次のサンプルコードは、バージョン ID を指定せずにリクエストを送信することにより、バージョン管理されたバケットからオブジェクトを一時的に削除する例を示しています。
using Aliyun.OSS; using Aliyun.OSS.Common; // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "yourEndpoint"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // バケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 var objectName = "exampledir/exampleobject.txt"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 { // バージョン ID を指定せずにオブジェクトを一時的に削除します。削除マーカーがオブジェクトに追加されます。 var result = client.DeleteObject(bucketName, objectName); Console.WriteLine("オブジェクトの削除に成功しました。versionid: {0}、DeleteMarker: {1}", result.VersionId, result.DeleteMarker); } catch (Exception ex) { Console.WriteLine("オブジェクトの削除に失敗しました。{0}", ex.Message); }
複数オブジェクトの削除
次の例では、バージョン管理されたバケットから複数のオブジェクトを完全にまたは一時的に削除する方法について説明します。
完全な削除
次のサンプルコードは、指定されたバージョン ID を持つ複数のオブジェクト、または指定されたバージョン ID を持つ削除マーカーが現在のバージョンであるオブジェクトを、バージョン管理されたバケットから完全に削除する例を示しています。
using Aliyun.OSS; using Aliyun.OSS.Common; // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "yourEndpoint"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // バケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 { // 指定されたバージョン ID を持つオブジェクト、または指定されたバージョン ID を持つ削除マーカーが現在のバージョンであるオブジェクトを削除します。 var obj1 = new ObjectIdentifier { Key = "yourObject1Name", VersionId = "yourObject1NameVersionid" }; var obj2 = new ObjectIdentifier { Key = "yourObject2Name", VersionId = "yourObject2DelMarkerVersionid" }; IList<ObjectIdentifier> objects = new List<ObjectIdentifier>(); objects.Add(obj1); objects.Add(obj2); var request = new DeleteObjectVersionsRequest(bucketName, objects); // deleteVersions リクエストを開始します。 client.DeleteObjectVersions(request); Console.WriteLine("DeleteObjectVersions に成功しました"); } catch (OssException ex) { Console.WriteLine("エラーコード: {0} で失敗しました。エラー情報: {1}。\nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("エラー情報: {0} で失敗しました", ex.Message); }
一時的な削除
次のサンプルコードは、バージョン ID を指定せずに、バージョン管理が有効なバケットから複数のオブジェクトを一時的に削除する例を示しています。一時的に削除されたオブジェクトの現在のバージョンは復元できます。
using Aliyun.OSS; using Aliyun.OSS.Common; // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 var endpoint = "yourEndpoint"; // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。 var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // バケットの名前を指定します。例: examplebucket。 var bucketName = "examplebucket"; // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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 { var keys = new List<string>(); var listResult = client.ListObjects(bucketName); foreach (var summary in listResult.ObjectSummaries) { keys.Add(summary.Key); } // quietMode の値を指定します。true は quiet を示します。このモードでは、削除されたオブジェクトは返されません。false は verbose を示します。このモードでは、削除されたオブジェクトが返されます。デフォルト値: false。 var quietMode = false; // DeleteObjectsRequest リクエストで quietMode の値を設定することにより、戻りモードを指定します。 var request = new DeleteObjectsRequest(bucketName, keys, quietMode); // バージョン ID を指定せずにオブジェクトを削除します。削除マーカーがオブジェクトに追加されます。 var result = client.DeleteObjects(request); if ((!quietMode) && (result.Keys != null)) { foreach (var obj in result.Keys) { Console.WriteLine("削除に成功しました: {0} ", obj.Key); } } Console.WriteLine("オブジェクトの削除に成功しました"); } catch (Exception ex) { Console.WriteLine("オブジェクトの削除に失敗しました。{0}", ex.Message); }
名前に特定のプレフィックスを含むオブジェクトの削除
次のサンプルコードは、名前に指定されたプレフィックスを含むオブジェクトを削除する例を示しています。
using Aliyun.OSS;
using Aliyun.OSS.Common;
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が構成されていることを確認してください。
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。
var bucketName = "examplebucket";
var prefix = "yourkeyPrefix";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを 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
{
ObjectVersionList result = null;
var request = new ListObjectVersionsRequest(bucketName)
{
// 一覧表示するオブジェクトの名前に含まれるプレフィックスを指定します。
Prefix = prefix
};
// 名前に特定のプレフィックスを含むすべてのオブジェクトのバージョンを一覧表示し、バージョンを削除します。
do
{
result = client.ListObjectVersions(request);
Console.WriteLine("ListObjectVersions に成功しました");
foreach (var deleteversion in result.DeleteMarkerSummaries)
{
var request = new DeleteObjectRequest(bucketName, deleteversion.Key)
{
VersionId = deleteversion.VersionId
};
client.DeleteObject(request);
}
foreach (var objectversion in result.ObjectVersionSummaries)
{
var request = new DeleteObjectRequest(bucketName, objectversion.Key)
{
VersionId = objectversion.VersionId
};
client.DeleteObject(request);
}
request.KeyMarker = result.NextKeyMarker;
request.NextVersionIdMarker = result.NextVersionIdMarker;
} while (result.IsTruncated);
}
catch (OssException ex)
{
Console.WriteLine("エラーコード: {0} で失敗しました。エラー情報: {1}。\nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("エラー情報: {0} で失敗しました", ex.Message);
}
関連情報
オブジェクトを削除するために呼び出すことができる API 操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができる API 操作の詳細については、「複数のオブジェクトの削除」をご参照ください。