このトピックでは、1つのオブジェクト、複数のオブジェクト、および名前に指定されたプレフィックスが含まれているオブジェクトをバージョン管理されたバケットから削除する方法について説明します。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用して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を指定すると、
params
で指定されたversionId
パラメーターに基づいて、指定されたバージョンのオブジェクトが完全に削除されます。 IDがnullのバージョンを削除するには、params['versionId'] = "null"
をparams
に追加します。 OSSは、削除するバージョンのIDとして文字列 "null" を識別し、IDがnullのバージョンを削除します。
単一のオブジェクトの削除
次の例は、バージョン管理されたバケットから1つのオブジェクトを永続的または一時的に削除する方法を示しています。
永久削除
次のサンプルコードは、リクエストでオブジェクトのバージョンIDを指定して、バージョン管理されたバケットからオブジェクトバージョンを完全に削除する方法の例を示しています。
Aliyun.OSSを使用した// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { // 削除するオブジェクトまたは削除マーカーのバージョンIDを指定します。 var request = new DeleteObjectRequest(bucketName, objectName) { VersionId = versionid }; client.DeleteObject (要求); Console.WriteLine("オブジェクトの削除が成功しました"); } キャッチ (例外ex) { Console.WriteLine("オブジェクトの削除に失敗しました。 {0}"、例えばメッセージ); }
一時削除
次のサンプルコードは、バージョンIDが指定されていないリクエストを送信して、バージョン管理されたバケットからオブジェクトを一時的に削除する方法の例を示しています。
Aliyun.OSSを使用した// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { // バージョンIDを指定せずにオブジェクトを一時的に削除します。 削除マーカーがオブジェクトに追加されます。 var result = client.DeleteObject(bucketName, objectName); Console.WriteLine("Delete object successed, versionid: {0}, DeleteMarker: {1}", result.VersionId, result.DeleteMarker); } キャッチ (例外ex) { Console.WriteLine("オブジェクトの削除に失敗しました。 {0}"、例えばメッセージ); }
複数のオブジェクトの削除
次の例では、バージョン管理されたバケットから複数のオブジェクトを永続的または一時的に削除する方法について説明します。
永久削除
次のサンプルコードは、バージョン管理されたバケットから複数のオブジェクトを完全に削除する方法、または指定したバージョンIDを持つマーカーを削除する方法の例です。
Aliyun.OSSを使用した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"; // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { // 指定されたバージョンIDを持つオブジェクト、または現在のバージョンが指定されたバージョンIDを持つ削除マーカーであるオブジェクトを削除します。 var obj1=新しいObjectIdentifier { キー="yourObject1Name" 、 VersionId = "yourObject1NameVersionid" }; var obj2=新しいObjectIdentifier { キー="yourObject2Name" 、 VersionId = "yourObject2DelMarkerVersionid" }; IList<ObjectIdentifier> objects = new List<ObjectIdentifier>(); オブジェクト追加 (obj1); オブジェクト追加 (obj2); var request = new DeleteObjectVersionsRequest(bucketName, objects); // deleteVersionsリクエストを開始します。 client.DeleteObjectVersions (要求); Console.WriteLine("DeleteObjectVersions successed"); } キャッチ (OssException ex) { Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、 ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } キャッチ (例外ex) { Console.WriteLine("Failed with error info: {0}" 、メッセージなど); }
一時削除
次のサンプルコードでは、バージョンIDを指定せずに、バージョン管理が有効なバケットから複数のオブジェクトを一時的に削除する方法の例を示します。 一時的に削除されたオブジェクトの現在のバージョンを復元できます。
Aliyun.OSSを使用した// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを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"; // OSSClientインスタンスを作成します。 var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret); トライ { var keys = new List<string>(); var listResult = client.ListObjects(bucketName); foreach (var summary in listResult.ObjectSummaries) { keys.Add(summary.Key); } // quietModeの値を指定します。 trueは静かを示します。 このモードでは、削除されたオブジェクトは返されません。 falseは冗長を示します。 このモードでは、削除されたオブジェクトが返されます。 デフォルト値: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("Delete successfully : {0} ", obj.Key); } } Console.WriteLine("Delete objects successed"); } キャッチ (例外ex) { Console.WriteLine("オブジェクトの削除に失敗しました。 {0}"、例えばメッセージ); }
名前に特定のプレフィックスが含まれるオブジェクトを削除する
次のサンプルコードは、名前に指定されたプレフィックスが含まれるオブジェクトを削除する方法の例を示しています。
Aliyun.OSSを使用した
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";
// OSSClientインスタンスを作成します。
var client = new OssClient (エンドポイント、accessKeyId、accessKeySecret);
トライ
{
ObjectVersionList結果=null;
var request = new ListObjectVersionsRequest(bucketName)
{
// 一覧表示するオブジェクトの名前に含まれるプレフィックスを指定します。
プレフィックス=プレフィックス;
};
// 名前に特定のプレフィックスが含まれているすべてのオブジェクトのバージョンを一覧表示し、バージョンを削除します。
do {
result = client.ListObjectVersions (リクエスト);
Console.WriteLine("ListObjectVersions successed");
foreach (結果のvar deleteversion。DeleteMarkerSummaries)
{
var request = new DeleteObjectRequest(bucketName, deleteversion.Key)
{
VersionId = deleteversion.VersionId
};
client.DeleteObject (要求);
}
foreach (結果のvar objectversion. ObjectVersionSummaries)
{
var request = new DeleteObjectRequest(bucketName, objectversion.Key)
{
VersionId = objectversion.VersionId
};
client.DeleteObject (要求);
}
request.KeyMarker = result.NextKeyMarker;
request.NextVersionIdMarker = result.NextVersionIdMarker;
} while (result.IsTruncated)
}
キャッチ (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID:{2}\tHostID:{3}"、
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
キャッチ (例外ex)
{
Console.WriteLine("Failed with error info: {0}" 、メッセージなど);
}
参考資料
オブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除するために呼び出すことができるAPI操作の詳細については、「DeleteMultipleObjects」をご参照ください。