删除对象
DeleteObject操作用于删除一个object。对于开启版本控制的Bucket执行删除对象操作时,如果未指定versionId ,则保留对象的当前版本,并插入删除标记(Delete Marker)。如果指定versionId,则永久删除该指定版本ID的对象。如果在未指定versionId的情况下执行DeleteObject操作时,默认仅作用于对象的当前版本,但不会直接删除该对象的当前版本,而是插入一个删除标记(Delete Marker),并保留原来的当前版本。当执行GetObject操作时,OSS会检测到当前版本为删除标记,并返回404 NotFound。
代码示例:
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
namespace DotNetSDK.ObjectOperation
{
public class DeleteObjectExample
{
public static async Task DeleteObject()
{
var accessKey = "YOUR_ACCESS_KEY";
var secretKey = "YOUR_SECRET_KEY";
var endpoint = "YOUR_ENDPOINT";
var bucketName = "EXAMPLE_BUCKET";
var key = "EXAMPLE_KEY";
var credentials = new BasicAWSCredentials(accessKey, secretKey);
try
{
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
var deleteObjectRequest = new DeleteObjectRequest()
{
BucketName = bucketName,
Key = key
};
var result = await s3Client.DeleteObjectAsync(deleteObjectRequest);
if (result.HttpStatusCode != System.Net.HttpStatusCode.NoContent)
{
Console.WriteLine("fail to delete object {0}, HttpStatusCode:{1}, ErrorCode:{2}.", key, (int) result.HttpStatusCode, result.HttpStatusCode);
}
Console.WriteLine("deleted object {0}.", key);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
DeleteObject可设置的参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
BucketName | string | bucket的名称。 | 是 |
Key | string | 对象的key。 | 是 |
VersionId | string | 用于指定要删除对象的versionId | 否 |
DeleteObjectOutput返回的结果如下:
参数 | 类型 | 说明 |
---|---|---|
DeleteMarker | string | 有效值为true。在桶开启版本控制的情况下,执行DeleteObject 操作时如果未指定对象的版本Id,OSS会创建删除标记,此时DeleteMarker为true。如果指定对象的版本Id来永久删除指定对象版本时,若该版本Id是删除标记,则DeleteMarker也为true。其他情况下DeleteMarker的值为空。 |
VersionId | string | 执行DeleteObject操作时如果未指定对象的版本Id,OSS会创建删除标记,VersionId为删除标记的版本Id。 如果指定版本Id来永久删除对象指定版本时,返回的VersionId为对象的版本Id。 |
响应结果:
HTTP状态码 | 响应码 | 描述 |
---|---|---|
204 | NoContent | 操作成功。 |
403 | AccessDenied | 用户没有权限执行操作。 |
404 | NoSuchBucket | 操作指定的bucket不存在。 |
DeleteObjects操作可以实现通过一个HTTP请求批量删除多个对象的功能,可以减少发起多起请求去删除大量对象的花销。DeleteObjects操作发起一个包含了最多1000个key的删除请求,媒体存储服务会对相应的对象逐个进行删除,并且将删除成功或者失败的结果通过response返回。如果请求删除的对象不存在,会返回已删除的结果。
DeleteObjects操作返回verbose和quiet两种response模式。 verbose response是默认的返回模式,该模式的返回结果包含了每个key的删除结果。quiet response返回模式返回的结果仅包含了删除失败的key,对于一个完全成功的删除操作,该返回模式不在相应消息体中返回任何信息。
代码示例:
using System;
using System.Threading.Tasks;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
namespace DotNetSDK.ObjectOperation
{
public class DeleteObjectsExample
{
public static async Task DeleteObjects()
{
var accessKey = "YOUR_ACCESS_KEY";
var secretKey = "YOUR_SECRET_KEY";
var endpoint = "YOUR_ENDPOINT";
var bucketName = "EXAMPLE_BUCKET";
try
{
var credentials = new BasicAWSCredentials(accessKey, secretKey);
var conf = new AmazonS3Config
{
ServiceURL = endpoint
};
var s3Client = new AmazonS3Client(credentials, conf);
DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest()
{
BucketName = bucketName,
Quiet = false
};
deleteObjectsRequest.AddKey("key1");
deleteObjectsRequest.AddKey("key2");
var result = await s3Client.DeleteObjectsAsync(deleteObjectsRequest);
Console.WriteLine("HttpStatusCode:{0}, {1}", (int) result.HttpStatusCode, result.HttpStatusCode);
//打印删除成功的对象信息
foreach (var deletedObject in result.DeletedObjects)
{
Console.WriteLine("Key:{0}, DeleteMarker:{1}, VersionId:{2}, DeleteMarkerVersionId:{3}.", deletedObject.Key, deletedObject.DeleteMarker, deletedObject.VersionId,
deletedObject.DeleteMarkerVersionId);
}
//打印删除失败的对象信息
foreach (var deleteError in result.DeleteErrors)
{
Console.WriteLine("Code:{0}, Key:{1}, Message:{2}, VersionId:{3}", deleteError.Code, deleteError.Key, deleteError.Message, deleteError.VersionId);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
DeleteObjectsRequest可设置的参数如下:
参数 | 类型 | 说明 | 是否必要 |
---|---|---|---|
BucketName | string | bucket的名称。 | 是 |
Quiet | bool | 设置为ture表示采用返回结果为quiet response模式,设置为false表示返回结果为verbose response模式。 | 否 |
DeleteObjects返回的结果如下:
参数 | 类型 | 说明 |
---|---|---|
Deleted | List<DeletedObject> | 被删除对象信息的数组,数组中每一项包含了一个被成功删除的对象的信息,包括删除标记、对象key和版本id等信息。 |
Errors | List<DeleteError> | 删除失败的对象信息的数组,数组中每一项包含了一个删除失败的对象的信息,包括错误码、对象key和版本id等信息。 |
RequestCharged | *string | 如果返回结果中包含该属性,表示请求的发起者对该次请求操作付费。 |
响应结果:
HTTP状态码 | 响应码 | 描述 |
---|---|---|
200 | OK | 操作成功。 |
400 | BadRequest | 当前资源池暂不支持批量删除对象操作。 |
403 | Forbidden | 用户没有权限执行操作。 |