Amazon s3 在AmazonS3 bucket中添加文件夹

Amazon s3 在AmazonS3 bucket中添加文件夹,amazon-s3,Amazon S3,我想使用编码将文件夹添加到我的AmazonS3存储桶中。 你能告诉我如何实现这一点吗?Amazon S3中没有文件夹。只是大多数可用的S3浏览器工具都会将部分键名以斜杠分隔显示为文件夹 如果确实需要,可以创建一个结尾带有斜杠的空对象。e、 g.“folder/”如果您使用GUI工具和AWS控制台打开它,它看起来就像一个文件夹 使用AWS SDK.Net,只需在名称文件夹末尾添加“/”: var folderKey = folderName + "/"; //end the folder nam

我想使用编码将文件夹添加到我的AmazonS3存储桶中。
你能告诉我如何实现这一点吗?

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


如果确实需要,可以创建一个结尾带有斜杠的空对象。e、 g.“folder/”如果您使用GUI工具和AWS控制台打开它,它看起来就像一个文件夹

使用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控制台,您将看到rails gem自己执行此操作的文件夹:

AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)
将自动创建
摘要
图像
“文件夹”(如果它们不存在)。

Java with AWS SDK:

  • s3中没有文件夹,只有键/值对。键可以包含斜杠(
    /
    ),这将使它在管理控制台中显示为文件夹,但从编程角度看,它不是文件夹,而是字符串值

  • 如果您试图构建s3存储桶,那么您的命名约定(您给文件的键)可以简单地遵循正常的目录模式,即
    文件夹/subfolder/file.txt

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

    storageBucket
    是存储桶的名称,
    前缀
    是要搜索的键,
    分隔符
    用于根据
    前缀过滤搜索


  • 每个人都告诉过你,在AWSS3中没有任何“文件夹”,你对它们的想法是错误的。AWS S3有“对象”,这些对象可以看起来像文件夹,但它们并不是真正意义上的文件夹。如果你想在AmazonAWSS3上创建文件夹,你不会发现很多好的结果

    有一种方法可以创建“文件夹”,即您可以在S3上创建一个模拟的文件夹结构,但是再次强调,您是在S3中创建对象,而不是文件夹。同时,您需要使用命令“put object”来创建这个模拟文件夹结构。现在,要使用此命令,需要安装AWS CLI工具,请转到此处获取安装说明

    命令如下:

    aws s3api put-object --bucket your-bucket-name --key path/to/file/yourfile.txt --body yourfile.txt
    
    现在,这个命令的有趣之处在于,在运行这个命令之前,不需要创建所有的“文件夹”(对象)。这意味着你可以有一个“文件夹”(对象)来包含东西,但是你可以使用这个命令在这个“文件夹”(对象)中创建一个模拟的文件夹结构,就像我前面讨论的那样。例如,我的S3存储桶中有一个名为“importer”的“folder”(对象),假设我想在年、月的“folder”(对象)结构中插入sample.txt,然后在所有这些结构中插入一个示例“folder”(对象)

    如果我的bucket中只有“importer”对象,那么在运行此命令之前,我不需要事先创建年、月和示例对象(“文件夹”)。我可以这样运行此命令:

    aws s3api put-object --bucket my-bucket-here --key importer/2016/01/sample/sample.txt --body sample.txt
    
    然后,put object命令将进入并创建我在--key标志中指定的路径。这里有一点值得注意:即使您没有要上传到S3的文件,您仍然可以在S3 bucket中创建对象(“文件夹”),例如,我创建了一个shell脚本来在bucket中“创建文件夹”,方法是去掉--body标志,不指定文件名,并在--key标志中提供的路径末尾留下斜线,系统在S3 bucket中创建所需的模拟文件夹结构,而无需在此过程中插入文件

    希望这能帮助您更好地理解系统


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

    您可以从可用的

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

    免责声明:我在iOS(Objective-C)中为

    工作,我按照以下方式工作

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

    -(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");
            }
        }];
    }
    

    对于Swift,我创建了一个方法,您可以在其中为文件夹名传入一个
    字符串

    Swift 3:

    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
        })
    }
    
    那就打电话吧

     createFolderWith(Name:"newFolder")
    

    在swift 2.2中,您可以使用

    func createFolderWith(Name: String!) {
        let folderRequest: AWSS3PutObjectRequest = AWSS3PutObjectRequest()
        folderRequest.key = Name + "/"
        folderRequest.bucket = "Your Bucket Name"
        AWSS3.defaultS3().putObject(folderRequest).continueWithBlock({ (task) -> AnyObject? in
            if task.error != nil {
                assertionFailure("* * * error: \(task.error?.localizedDescription)")
            } else {
                print("created \(Name) folder")
            }
            return nil
        })
    }
    
    使用,可以将整个文件夹复制到存储桶中

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

    还可以选择同步使用下面的
    aws s3 sync

    创建名为“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"
             }
             */
        } });
    

    来源:

    为了在s3 bucket中创建一个目录并复制其中的内容,这非常简单

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


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

    以下是实现所需内容的方法(通过代码/cli):

    --创建/选择要移动到文件夹中的文件(本地):
    ~/Desktop>触摸文件以移动
    --通过执行以下操作将文件移动到s3文件夹:
    ~/Desktop>aws s3 cp文件到移动s3:////
    
    一个新的文件夹将在你的s3存储桶上创建,你现在可以执行cp、mv、rm。。。语句,即按常规管理文件夹

    如果不需要上面创建的新文件,只需删除即可
    --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>/
    
    aws s3 cp test.xml s3://mybucket/myfolder/test.xml