我找不到任何解决方法,我必须将字符串静态映射到新的客户端实例才能进行删除。
public static void DeleteFromRegion(string location, string bucketName, AWSCredentials credentials)
{
AmazonS3Client client = null;
ListObjectsResponse objects = null;
switch (location)
{
case "us-west-1":
client = new AmazonS3Client(credentials, RegionEndpoint.USWest1);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "us-west-2":
client = new AmazonS3Client(credentials, RegionEndpoint.USWest2);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "":
case "us-east-1":
client = new AmazonS3Client(credentials, RegionEndpoint.USEast1);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "us-east-2":
client = new AmazonS3Client(credentials, RegionEndpoint.USEast2);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "eu-west-1":
client = new AmazonS3Client(credentials, RegionEndpoint.EUWest1);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "eu-west-2":
client = new AmazonS3Client(credentials, RegionEndpoint.EUWest2);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "eu-west-3":
client = new AmazonS3Client(credentials, RegionEndpoint.EUWest3);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "eu-north-1":
client = new AmazonS3Client(credentials, RegionEndpoint.EUNorth1);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
case "eu-south-1":
client = new AmazonS3Client(credentials, RegionEndpoint.EUSouth1);
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName }).Result;
DeleteObjects(client, objects, bucketName);
break;
default:
throw new Exception("Region not recognized");
}
}
public static void DeleteObjects(AmazonS3Client client, ListObjectsResponse objects, string bucketName)
{
while (true)
{
var kv = new List<KeyVersion>();
foreach (var o in objects.S3Objects)
{
kv.Add(new KeyVersion{ Key = o.Key });
}
if (objects.S3Objects.Count == 0) break;
client.DeleteObjectsAsync(new DeleteObjectsRequest() { BucketName = bucketName, Objects = kv }).Wait();
if (objects.IsTruncated)
{
objects = client.ListObjectsAsync(new ListObjectsRequest() { BucketName = bucketName, Marker = objects.NextMarker }).Result;
}
else
{
break;
}
}
}