如果使用AWS SDK for .NET的S3DirectoryInfo来删除S3上的文件夹,Delete() 方法有时可能会无法正确地删除该文件夹。这是由于文件夹可能包含很多对象,而S3只允许一次删除最多允许1000个对象。
要解决这个问题,可以使用递归删除单个对象的方式来删除整个文件夹。可以使用以下代码示例:
public static void DeleteS3Directory(AmazonS3Client client, string bucket, string folder) { var listRequest = new ListObjectsRequest { BucketName = bucket, Prefix = folder }; ListObjectsResponse listResponse;
do
{
listResponse = client.ListObjects(listRequest);
foreach (var obj in listResponse.S3Objects)
{
client.DeleteObject(bucket, obj.Key);
}
listRequest.Marker = listResponse.NextMarker;
} while (listResponse.IsTruncated);
client.DeleteObject(bucket, folder);
}
使用该方法,传递AmazonS3Client、要删除的BUCKET和文件夹的路径即可,如:
var client = new AmazonS3Client(AWSACCESSKEY, AWSSECRETKEY, RegionEndpoint.USEast1);
DeleteS3Directory(client, "mybucket", "myfolder");