在Amazon s3存储桶中添加文件夹

Bha*_*tre 29 amazon-s3

我想使用编码在我的amazon s3存储桶中添加Folder.你能告诉我如何实现这个目标吗?

小智 42

Amazon S3中没有文件夹.只是大多数可用的S3浏览器工具都显示了由斜杠作为文件夹分隔的键名的一部分.

如果你真的需要它,你可以创建一个带有斜杠的空对象.例如"folder /"如果您使用GUI工具和AWS控制台打开它,它将看起来像一个文件夹.

  • 它看起来像我的文件夹? (6认同)

小智 17

使用AWS SDK的Java:

  1. s3中没有文件夹,只有键/值对.密钥可以包含斜杠(/),这将使它在管理控制台中显示为一个文件夹,但从编程方面来说,它不是一个文件夹,而是一个字符串值.

  2. 如果您正在尝试构建s3存储桶,那么您的命名约定(您提供文件的密钥)可以简单地遵循正常的目录模式,即folder/subfolder/file.txt.

    搜索时(取决于您使用的语言),您可以使用分隔符搜索前缀.在Java中,它将是一个listObjects(String storageBucket, String prefix, String delimiter)方法调用.

    storageBucket是您的存储桶的名称,prefix是您要搜索的密钥,delimiter用于根据您的搜索过滤搜索prefix.


小智 16

正如大家告诉你的那样,在AWS S3中没有任何"文件夹",你错误地想到了它们.AWS S3具有"对象",这些对象看起来像文件夹,但它们并不是真正意义上的文件夹.如果您在Amazon AWS S3上寻找创建文件夹,您将找不到很多好的结果.

有一种方法可以创建"文件夹",因为您可以在S3上创建模拟文件夹结构,但是,再次围绕在S3中创建对象而不是文件夹的事实.与此同时,您将需要命令"put-object"来创建此模拟文件夹结构.现在,为了使用此命令,您需要安装AWS CLI工具,请访问AWS CLI安装以获取安装它们的说明.

命令是这样的:

aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt
Run Code Online (Sandbox Code Playgroud)

现在,关于此命令的有趣部分是,在运行此命令之前,不需要创建所有"文件夹"(对象).这意味着您可以使用"文件夹"(对象)来包含内容,但是您可以使用此命令在该"文件夹"(对象)中创建模拟文件夹结构,如前所述.例如,我的S3存储桶中有一个名为"importer"的"文件夹"(对象),假设我想在年份,月份的"文件夹"(对象)结构中插入sample.txt,然后是样本"文件夹"(对象)在所有这些中.

如果我的存储桶中只有"importer"对象,则在运行此命令之前,我不需要事先创建年份,月份和示例对象("文件夹").我可以这样运行这个命令:

aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt
Run Code Online (Sandbox Code Playgroud)

然后put-object命令进入并创建我在--key标志中指定的路径.这里有点宝石:即使您没有要上传到S3的文件,您仍然可以在S3存储桶中创建对象("文件夹"),例如,我创建了一个shell脚本来"创建文件夹"在桶中,通过省略--body标志,而不指定文件名,并在--key标志中提供的路径末尾留下斜杠,系统在S3桶中创建所需的模拟文件夹结构没有在过程中插入文件.

希望这有助于您更好地理解系统.

注意:一旦创建了"文件夹"结构,就可以使用S3的"sync"命令将后代"文件夹"与本地计算机上的文件夹同步,甚至与另一个S3存储桶同步.


sam*_*tte 9

AWS:S3轨宝石做到这一点本身:

AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)
Run Code Online (Sandbox Code Playgroud)

如果它们尚不存在,将自动创建teaserimages"文件夹".


elr*_*anu 5

使用 AWS SDK .Net 完美运行,只需在名称文件夹的末尾添加“/”:

var folderKey =  folderName + "/"; //end the folder name with "/"
AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(AWSAccessKey, AWSSecretKey);
var request = new PutObjectRequest();
request.WithBucketName(AWSBucket);
request.WithKey(folderKey);
request.WithContentBody(string.Empty);
S3Response response = client.PutObject(request);
Run Code Online (Sandbox Code Playgroud)

然后刷新您的 AWS 控制台,您将看到该文件夹


Yog*_*avi 5

在iOS(Objective-C)中,我做了以下方式

您可以添加以下代码以编程方式在amazon s3存储桶中创建一个文件夹.这是有效的代码片段.任何建议欢迎.

-(void)createFolder{
    AWSS3PutObjectRequest *awsS3PutObjectRequest = [AWSS3PutObjectRequest new];
    awsS3PutObjectRequest.key = [NSString stringWithFormat:@"%@/", @"FolderName"];
    awsS3PutObjectRequest.bucket = @"Bucket_Name";
    AWSS3 *awsS3 = [AWSS3 defaultS3];
    [awsS3 putObject:awsS3PutObjectRequest completionHandler:^(AWSS3PutObjectOutput * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"error Creating folder");
        }else{
            NSLog(@"Folder Creating Sucessful");
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)