从amazonS3存储桶异步删除所有文件



我想从一个特定的S3存储桶中删除所有文件。这些文件存在于名为"的文件夹中;测试";S3铲斗内部。我不知道如何在一个循环中删除S3存储桶中的所有文件。我不确定我可以将哪些参数传递给DeleteObjectsAsync以删除文件。这是我在阅读了一些在线AWS文档后所得到的:

using (var client = new AmazonS3Client(_configuration["AwsAccesKey"].ToString(), _configuration["AwsSecretKey"].ToString()))
{
var request = new ListObjectsRequest
{

BucketName = _configuration["AwsBucketName"].ToString()
};

var response = await client.ListObjectsAsync(request);
foreach (var entry in response.S3Objects)
{
await client.DeleteObjectsAsync(request, entry.Key);
}
}
return View();

用户一直要求我删除所有文件,只要他们点击前端的按钮。这与持续时间无关。

如有任何帮助,我们将不胜感激。

DeleteObjectsAsync方法不包括DeleteObjectsRequest,该方法应包含要删除的对象的所有键。

你的代码应该是这样的:

var request = new ListObjectsRequest
{
BucketName = "bucketname"
};
var response = await client.ListObjectsAsync(request);
var keys = new List<KeyVersion>();
foreach (var item in response.S3Objects)
{
// Here you can provide VersionId as well.
keys.Add(new KeyVersion { Key = item.Key });
}
var multiObjectDeleteRequest = new DeleteObjectsRequest()
{
BucketName = "bucketname",
Objects = keys
};
var deleteObjectsResponse = await client.DeleteObjectsAsync(multiObjectDeleteRequest);

需要注意的是,ListObjectsAsync最多返回1000个对象。DeleteObjectsRequest最多删除1000个对象。

您可以在此处阅读更多信息:https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-multiple-objects.html

下面是递归删除特定S3存储桶中所有文件的完整代码:

public async Task<IActionResult> DeleteAll()
{
using (var client = new AmazonS3Client(_configuration["AwsAccesKey"].ToString(), _configuration["AwsSecretKey"].ToString()))
{
var request = new ListObjectsRequest
{
BucketName = _configuration["AwsBucketName"].ToString()
};
var response = await client.ListObjectsAsync(request);
foreach (var entry in response.S3Objects)
{
await client.DeleteObjectAsync(_configuration["AwsBucketName"].ToString(), entry.Key);
}
}

return View();
}

最新更新