从亚马逊 S3 存储桶中异步删除所有文件

Deleting all file asynchronsly from amazon S3 bucket

我想删除特定 S3 存储桶中的所有文件。这些文件存在于 S3 存储桶内名为“test”的文件夹中。我不知道如何循环删除 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();

用户一直要求我在单击前面的按钮时删除所有文件end.This不依赖于持续时间。

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

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 returns 最多 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();

        }