2015-10-08 106 views
2

我想删除基本上是日期的文件夹内的所有文件。使用API​​从Amazon S3删除文件夹

假设,如果有100文件文件夹下的“2015年8月10日”,而不是将所有的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. 
      } 

我正在使用上面的代码,它不工作。

+4

S3 API不允许你直接删除文件夹,因为文件夹在S3中不存在(它们是对用户的逻辑表示)。相反,您必须将[多个对象键指定为'DeleteObjectsRequest'](http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingNetSDK.html)。您可以通过指定['ListObjectsRequest'](http://docs.aws.amazon.com/sdkfornet1/latest/apidocs/html/T_Amazon_S3_Model_ListObjectsRequest.htm)的'Prefix'属性来搜索'文件夹'下的所有密钥,所以你可以把它和删除结合起来做你想做的事情。 – birryree

回答

0

你必须:

  1. 列表中的文件夹中的所有对象
  2. 的检索关键字为每个对象
  3. 该键添加到多个删除对象请求
  4. 使请求删除所有物体

    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 = client.ListObjects(request); 
          // Process response. 
          foreach (S3Object entry in response.S3Objects) 
          { 
    
           request2.AddKey(entry.Key); 
          } 
        request2.BucketName = "yourbucketname"; 
        DeleteObjectsResponse response2 = client.DeleteObjects(request2); 
    
8

我想你可以用下面的代码删除整个文件夹:

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 

我使用亚马逊AWSSDK.Core和AWSSDK.S3版本3.1.0.0为.NET 3.5。 我希望它可以帮助你

+0

工程就像一个魅力!谢谢! – forrert