Este tema describe cómo eliminar un objeto individual, varios objetos y aquellos cuyos nombres contienen un prefijo específico desde un bucket con control de versiones.
Notas
En este tema se utiliza el endpoint público de la región China (Hangzhou). Si desea acceder a OSS desde otros servicios de Alibaba Cloud ubicados en la misma región que OSS, utilice un endpoint interno. Para obtener más información sobre las regiones y los endpoints de OSS, consulte Regions and endpoints.
Este tema muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para conocer configuraciones alternativas, como usar un dominio personalizado o autenticarse con credenciales de Security Token Service (STS), consulte Initialization (C# SDK V1).
Para eliminar un objeto, debe contar con el permiso
oss:DeleteObject. Para obtener más información, consulte Grant a custom policy.
Comportamiento de eliminación en buckets con control de versiones
Al eliminar un objeto de un bucket con control de versiones, debe decidir si especifica un identificador de versión.
-
Eliminar un objeto sin especificar un identificador de versión (eliminación temporal)
Si no especifica un identificador de versión, OSS no elimina la versión actual. En su lugar, agrega un marcador de eliminación como la versión más reciente. Las solicitudes GetObject posteriores devuelven
404 Not Foundjunto conheader:x-oss-delete-marker = truey el valorx-oss-version-iddel marcador de eliminación en la respuesta.Cuando
x-oss-delete-markeres verdadero,x-oss-version-iddevuelve el identificador de versión del marcador de eliminación. -
Eliminar un objeto al especificar un identificador de versión (eliminación permanente)
Si especifica un identificador de versión, OSS elimina permanentemente esa versión mediante el parámetro
versionIddentro deparams. Para eliminar la versión con un identificador nulo, establezcaparams['versionId'] = "null"enparams. OSS interpreta la cadena "null" como el identificador de versión de destino.
Eliminar un solo objeto
A continuación se muestran ejemplos para eliminar de forma permanente o temporal un objeto individual de un bucket con control de versiones.
-
Eliminación permanente
El siguiente código de ejemplo muestra cómo eliminar permanentemente una versión de objeto de un bucket con control de versiones. Para ello, especifique el identificador de versión del objeto en la solicitud:
using Aliyun.OSS; using Aliyun.OSS.Common; // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Specify the name of the bucket. Example: examplebucket. var bucketName = "examplebucket"; // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. var objectName = "exampledir/exampleobject.txt"; // Specify the version ID of the object or the delete marker. var versionid = "yourObjectVersionidOrDelMarkerVersionid"; // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. const string region = "cn-hangzhou"; // Create a ClientConfiguration instance and modify the default parameters based on your requirements. var conf = new ClientConfiguration(); // Use the signature algorithm V4. conf.SignatureVersion = SignatureVersion.V4; // Create an OSSClient instance. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Specify the version ID of the object or the delete marker that you want to delete. var request = new DeleteObjectRequest(bucketName, objectName) { VersionId = versionid }; client.DeleteObject(request); Console.WriteLine("Delete object succeeded"); } catch (Exception ex) { Console.WriteLine("Delete object failed. {0}", ex.Message); } -
Eliminación temporal
El siguiente código de ejemplo muestra cómo eliminar temporalmente un objeto de un bucket con control de versiones. Envíe una solicitud en la que no se especifique ningún identificador de versión:
using Aliyun.OSS; using Aliyun.OSS.Common; // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Specify the name of the bucket. Example: examplebucket. var bucketName = "examplebucket"; // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. var objectName = "exampledir/exampleobject.txt"; // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. const string region = "cn-hangzhou"; // Create a ClientConfiguration instance and modify the default parameters based on your requirements. var conf = new ClientConfiguration(); // Use the signature algorithm V4. conf.SignatureVersion = SignatureVersion.V4; // Create an OSSClient instance. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Temporarily delete an object without specifying its version ID. A delete marker is added to the object. var result = client.DeleteObject(bucketName, objectName); Console.WriteLine("Delete object succeeded, versionid: {0}, DeleteMarker: {1}", result.VersionId, result.DeleteMarker); } catch (Exception ex) { Console.WriteLine("Delete object failed. {0}", ex.Message); }
Eliminar varios objetos
A continuación se describen ejemplos para eliminar de forma permanente o temporal varios objetos de un bucket con control de versiones.
-
Eliminación permanente
El siguiente código de ejemplo muestra cómo eliminar permanentemente varios objetos o marcadores de eliminación con identificadores de versión específicos de un bucket con control de versiones:
using Aliyun.OSS; using Aliyun.OSS.Common; // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Specify the name of the bucket. Example: examplebucket. var bucketName = "examplebucket"; // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. const string region = "cn-hangzhou"; // Create a ClientConfiguration instance and modify the default parameters based on your requirements. var conf = new ClientConfiguration(); // Use the signature algorithm V4. conf.SignatureVersion = SignatureVersion.V4; // Create an OSSClient instance. var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf); client.SetRegion(region); try { // Delete the objects with the specified version IDs or the objects whose current versions are delete markers with the specified version IDs. 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); // Initiate a deleteVersions request. client.DeleteObjectVersions(request); Console.WriteLine("DeleteObjectVersions succeeded "); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } -
Eliminación temporal
El siguiente código muestra cómo eliminar temporalmente varios objetos sin especificar sus versionIds. Las versiones eliminadas temporalmente se pueden recuperar.
using Aliyun.OSS; using Aliyun.OSS.Common; // Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. var endpoint = "yourEndpoint"; // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID"); var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET"); // Specify the name of the bucket. Example: examplebucket. var bucketName = "examplebucket"; // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou. const string region = "cn-hangzhou"; // Create a ClientConfiguration instance and modify the default parameters based on your requirements. var conf = new ClientConfiguration(); // Use the signature algorithm V4. conf.SignatureVersion = SignatureVersion.V4; // Create an OSSClient instance. 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); } // Specify the value of quietMode. true indicates quiet. In this mode, the deleted objects are not returned. false indicates verbose. In this mode, the deleted objects are returned. Default value: false. var quietMode = false; // Specify the return mode by setting the value of quietMode in the DeleteObjectsRequest request. var request = new DeleteObjectsRequest(bucketName, keys, quietMode); // Delete the objects without specifying their version IDs. Delete markers are added to the objects. 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 succeeded"); } catch (Exception ex) { Console.WriteLine("Delete objects failed. {0}", ex.Message); }
Eliminar objetos cuyos nombres contienen un prefijo específico
El siguiente código muestra cómo eliminar archivos con un prefijo específico.
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket.
var bucketName = "examplebucket";
var prefix = "yourkeyPrefix";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify the default parameters based on your requirements.
var conf = new ClientConfiguration();
// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
ObjectVersionList result = null;
var request = new ListObjectVersionsRequest(bucketName)
{
// Specify the prefix that is contained in the names of the objects that you want to list.
Prefix = prefix;
};
// List the versions of all objects whose names contain the specific prefix and delete the versions.
do {
result = client.ListObjectVersions(request);
Console.WriteLine("ListObjectVersions succeeded");
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("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
Console.WriteLine("Failed with error info: {0}", ex.Message);
}
Referencias
Para obtener más información sobre la operación de API que permite eliminar un objeto, consulte DeleteObject.
Para obtener más información sobre la operación de API que permite eliminar varios objetos, consulte DeleteMultipleObjects.