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

时间:2011-07-22 14:08:15

标签: amazon-s3

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

16 个答案:

答案 0 :(得分:43)

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

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

答案 1 :(得分:17)

使用AWS SDK的Java:

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

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

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

    storageBucket是您的广告素材的名称,prefix是您要搜索的密钥,delimiter用于根据{{1}过滤您的搜索}。

答案 2 :(得分:16)

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

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

命令是这样的:

aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt

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

如果我的存储桶中只有“importer”对象,则在运行此命令之前,我不需要事先进入创建年,月和样本对象(“文件夹”)。我可以像这样运行这个命令:

aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt

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

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

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

答案 3 :(得分:9)

AWS:S3 rails gem本身就是这样做的:

AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)

如果它们尚不存在,将自动创建teaserimages“文件夹”。

答案 4 :(得分:5)

在iOS(Objective-C)中,我按照以下方式进行了

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

[A-Z]

答案 5 :(得分:4)

使用aws cli,可以将整个文件夹复制到存储桶中。

aws s3 cp /path/to/folder s3://bucket/path/to/folder --recursive

还可以使用aws s3 sync

选择同步文件夹

答案 6 :(得分:3)

使用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);

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

答案 7 :(得分:2)

对于Swift,我创建了一个方法,您可以为文件夹名称传递from kivy.app import App from kivy.lang import Builder from kivy.uix.boxlayout import BoxLayout import time Builder.load_string(''' <CameraClick>: orientation: 'vertical' Camera: id: camera resolution: (640, 480) play: False ToggleButton: text: 'Play' on_press: camera.play = not camera.play size_hint_y: None height: '48dp' Button: text: 'Capture' size_hint_y: None height: '48dp' on_press: root.capture() ''') class CameraClick(BoxLayout): def capture(self): ''' Function to capture the images and give them the names according to their captured time and date. ''' camera = self.ids['camera'] timestr = time.strftime("%Y%m%d_%H%M%S") camera.export_to_png("IMG_" + timestr) print("Captured") class TestCamera(App): def build(self): return CameraClick() TestCamera().run()

斯威夫特3:

String

然后致电

import AWSS3

func createFolderWith(Name: String!) {
    let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
    folderRequest.key = Name + "/"
    folderRequest.bucket = bucket
    AWSS3.default().putObject(folderRequest).continue({ (task) -> Any? in
        if task.error != nil {
            assertionFailure("* * * error: \(task.error?.localizedDescription)")
        } else {
            print("created \(Name) folder")
        }
        return nil
    })
}

答案 8 :(得分:1)

在这里,您可以通过代码/ cli实现所需的内容:

--create/select the file (locally) which you want to move to the folder:

~/Desktop> touch file_to_move

--move the file to s3 folder by executing:

~/Desktop> aws s3 cp file_to_move s3://<path_to_your_bucket>/<new_folder_name>/

将在s3存储桶上创建一个新文件夹,您现在可以执行cp,mv,rm ...语句,即照常管理文件夹

如果不需要上面创建的这个新文件,只需将其删除。现在,您已经创建了一个s3存储桶。

答案 9 :(得分:0)

您可以从可用的AWS SDK

中选择您选择的语言

或者,您可以尝试在PythonGo.NetJavaJavascript中为您的应用程序开发环境提供的minio客户端库,它有示例列出所有基本操作的目录。

免责声明:我为Minio

工作

答案 10 :(得分:0)

在swift 2.2中,您可以使用

创建文件夹
yourViewPager.setOffScreenPagingLimt=2;

答案 11 :(得分:0)

下面创建一个名为“mydir1”的空目录。

下面是nodejs代码,它应该与其他语言类似。

诀窍是在对象名称末尾加斜杠(/),如“mydir1 /”,否则将创建名为“mydir1”的文件。

let AWS = require('aws-sdk');
AWS.config.loadFromPath(__dirname + '\\my-aws-config.json');
let s3 = new AWS.S3();

var params = {
    Bucket: "mybucket1",
    Key: "mydir1/",
    ServerSideEncryption: "AES256" };

s3.putObject(params, function (err, data) {
    if (err) {
        console.log(err, err.stack); // an error occurred
        return;
    } else {
        console.log(data);           // successful response
        return;
        /*
         data = {
         ETag: "\"6805f2cfc46c0f04559748bb039d69ae\"",
         ServerSideEncryption: "AES256",
         VersionId: "Ri.vC6qVlA4dEnjgRV4ZHsHoFIjqEMNt"
         }
         */
    } });

来源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

答案 12 :(得分:0)

按顺序在s3存储桶中创建一个目录并复制内容非常简单。

可以使用S3命令: aws s3 cp abc / def.txt s3:// mybucket / abc /

注意:/必须创建目录,否则它将成为s3中的文件。

答案 13 :(得分:0)

这是一个分歧性的话题,因此这是2019年AWS S3控制台的屏幕快照,用于添加文件夹和注释:

  

创建文件夹时,S3控制台将使用上述内容创建一个对象   名称后缀“ /”,该对象显示为文件夹   在S3控制台中。

然后“使用编码”,您只需在有效的文件夹名称字符串和正斜杠之前加上前缀,即可简单地调整对象名称。

Adding folders to S3

答案 14 :(得分:0)

我猜您的查询只是在folder(子文件夹)内创建一个文件夹。 因此,在处理bucket子文件夹内的任何目录数据时,请使用如下命令。

aws s3 cp mudit s3:// mudit-bucket / Projects-folder / mudit-subfolder-递归

它将创建一个子文件夹并将您的目录内容放入其中。同样,一旦您的子文件夹数据为空。您的子文件夹将自动被删除。

答案 15 :(得分:0)

复制文件时,可以使用复制命令创建文件夹。

aws s3 cp test.xml s3://mybucket/myfolder/test.xml