删除amazon s3 java中的文件,目录和存储桶

loc*_*boy 18 java amazon-web-services

我想知道如何做到这一点.我查看了sdk文档并提供了一些示例,但我很困惑语法通常如何.

如果我想删除文件,我假设我使用deleteObject(path, key).但是,什么是"关键"?

另外你如何删除目录?我似乎找不到这样做的方法.

Dan*_*ger 37

这段代码对我有用.folderPath就像"topDir/secondDir /"

void deleteObjectsInFolder(String bucketName, String folderPath) {
   for (S3ObjectSummary file : s3.listObjects(bucketName, folderPath).getObjectSummaries()){
      s3.deleteObject(bucketName, file.getKey());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 小心getObjectSummaries可以返回截断列表! (7认同)

Rei*_*ica 14

S3中的"键"类似于文件路径:

http://bucket.s3.amazonaws.com/some/path/to/use
Run Code Online (Sandbox Code Playgroud)

...在一个名为bucketand a key的桶中some/path/to/use.

它实际上并不是一条路径,因为没有文件夹.S3键只是一个大目录(整个存储桶)中文件的文件名.S3键可以包含/,但它没有特殊含义.

换句话说,拥有一个名为的对象delimiter并不告诉你关于该对象的任何信息some/object(它可能存在也可能不存在 - 这两个对象不相关).

但是,您可以请求具有特定前缀的密钥,因此我可以说"给我所有密钥开头,some它将返回some/path/to/.它看起来像"列出一个目录",但它实际上只是要求以特定字符串开头的文件字符.

我可以很容易地命名这样的事情:

somepathtousea
somepathtouseb
Run Code Online (Sandbox Code Playgroud)

并说"给我一切开始some/path/to/use"(它会说somepathtousesomepathtousea).

注意:S3 URL 有多种形式:

http://s3.amazonaws.com/bucket/key
http://bucket.s3.amazonaws.com/key
http://bucket/key (where bucket is a DNS CNAME record pointing to bucket.s3.amazonaws.com)
Run Code Online (Sandbox Code Playgroud)

编辑:

我查看了JavaDocs,这是我看到的函数签名(for somepathtouseb):

public void deleteObject(java.lang.String bucketName,
                         java.lang.String key)
                  throws AmazonClientException,
                         AmazonServiceException
Run Code Online (Sandbox Code Playgroud)

  • @ cfarm54 - 查看[AmazonS3Client的文档](http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html).`deleteBucket(String bucketName)`删除整个存储桶.[S3无法删除具有公共前缀的密钥](http://stackoverflow.com/questions/3178685/how-to-delete-lot-of-objects-named-with-common-prefix-from-s3-桶).你必须列出它们(`listObjects(String bucketName,String prefix)`)然后单独删除它们. (2认同)

sri*_*eak 6

您可能需要查看此示例,以快速参考如何从S3中删除对象.

delete实际上deleteObject( bucketName, key ) ,其语法是 bucketName是放置文件的存储桶,而key是要在存储桶中删除的文件的名称.

可以将存储桶视为硬盘驱动器,如C:\,D:\等.并将键作为要删除的文件的绝对路径名.


Tar*_*mal 6

/*这是对我有用的解决方案。这里 Bucket_Name 是我在 S3 上的桶名,key 是 Bucket_Name 下的路径。所以,如果 S3 上的绝对路径是:

s3://my_bucket/Path/to/my/folder

那么,下面的代码应该可以工作。*/


    String Bucket_Name = "my_bucket";
    String key = "Path/to/my/folder";   
    ObjectListing objects = s3Client.listObjects(BUCKET_NAME, key);
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) 
            {
            s3Client.deleteObject(BUCKET_NAME, objectSummary.getKey());
            }           
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 SO。你还没有解决“什么是关键”的问题。您正在提供代码,但需要一些解释才能使其对其他有问题的用户具有更高的价值。 (4认同)