C# 使用API从AmazonS3中删除文件夹

C# 使用API从AmazonS3中删除文件夹,c#,amazon-web-services,amazon-s3,C#,Amazon Web Services,Amazon S3,我试图删除文件夹中的所有文件,基本上就是日期 假设,如果文件夹“08-10-2015”下有100个文件,我想发送文件夹名,而不是发送所有这100个文件名 我正在尝试下面的代码,它不适合我 DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(); multiObjectDeleteRequest.BucketName = bucketName; mult

我试图删除文件夹中的所有文件,基本上就是日期

假设,如果文件夹“08-10-2015”下有100个文件,我想发送文件夹名,而不是发送所有这100个文件名

我正在尝试下面的代码,它不适合我

        DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest();

        multiObjectDeleteRequest.BucketName = bucketName;

        multiObjectDeleteRequest.AddKey(keyName + "/" + folderName + "/");


        AmazonS3Config S3Config = new AmazonS3Config()
        {
            ServiceURL = string.Format(servicehost)
        };

        using (IAmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(accesskey, secretkey, S3Config))
        {
            try
            {
                DeleteObjectsResponse response = client.DeleteObjects(multiObjectDeleteRequest);
                Console.WriteLine("Successfully deleted all the {0} items", response.DeletedObjects.Count);

            }
            catch (DeleteObjectsException e)
            {
                // Process exception.
            }
我正在使用上述代码,但它不起作用。

您必须:

  • 列出文件夹中的所有对象
  • 检索每个对象的键
  • 将此密钥添加到多个删除对象请求
  • 请求删除所有对象

     AmazonS3Config S3Config = new AmazonS3Config()
        {
            ServiceURL = "s3.amazonaws.com",
            CommunicationProtocol = Amazon.S3.Model.Protocol.HTTP,
        };
    
     const string AWS_ACCESS_KEY = "xxxxxxxxxxxxxxxx";
     const string AWS_SECRET_KEY = "yyyyyyyyyyyyyyyy";            
     AmazonS3Client client = new AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, S3Config);
    
        DeleteObjectsRequest request2 = new DeleteObjectsRequest();
        ListObjectsRequest request = new ListObjectsRequest
        {
            BucketName = "yourbucketname",
            Prefix = "yourprefix"
    
        };
    
        ListObjectsResponse response = await client.ListObjectsAsync(request);
                // Process response.
                foreach (S3Object entry in response.S3Objects)
                {
    
                    request2.AddKey(entry.Key);
                }
        request2.BucketName = "yourbucketname";
        DeleteObjectsResponse response2 = await client.DeleteObjectsAsync(request2);
    

  • 我认为您可以使用以下代码删除整个文件夹:

     AmazonS3Config cfg = new AmazonS3Config();
     cfg.RegionEndpoint = Amazon.RegionEndpoint.EUCentral1;
     string bucketName = "your bucket name";
     AmazonS3Client s3Client = new AmazonS3Client("your access key", "your secret key", cfg);
     S3DirectoryInfo directoryToDelete = new S3DirectoryInfo(s3Client, bucketName, "your folder name or full folder key");
     directoryToDelete.Delete(true); // true will delete recursively in folder inside
    
    我正在使用AmazonAWSSDK.Core和AWSSDK.S3版本3.1.0.0 for.NET3.5。
    我希望它能帮助您

    S3API不允许您直接按文件夹删除,因为S3中不存在文件夹(它们是对用户的逻辑表示)。相反,您必须指定。您可以通过指定的
    Prefix
    属性来搜索“folder”下的所有键,因此您可以将其与delete结合使用以执行您想要的操作。工作起来很有魅力!谢谢看起来Go没有这样的功能:(我们有node JS SDK的功能吗?看起来S3.IO在.NET core或Standard中都不受支持。正因为如此,我才放弃了它(否则我会选择,递归删除文件夹更容易实现)Core中不支持,但完全支持。不确定原因。似乎不起作用。当S3上的文件夹为空时,列表对象不会返回任何条目。请在。。。