web-dev-qa-db-ja.com

Amazon s3バケットにフォルダーを追加する

コーディングを使用してAmazon s3バケットにFolderを追加します。これを達成する方法を教えてください。

29
Bharat Mhatre

Amazon S3にはフォルダーはありません。使用可能なS3ブラウザーツールのほとんどが、スラッシュとして区切られたキー名の一部をフォルダーとして表示しているだけです。

本当に必要な場合は、最後にスラッシュを付けて空のオブジェクトを作成できます。例えば「folder /」GUIツールとAWSコンソールで開くと、フォルダーのように見えます。

43
cloudberryman

AWS SDKを使用したJava:

  1. S3にはフォルダーはなく、キー/値のペアのみがあります。キーにはスラッシュ(_/_)を含めることができます。これにより、管理コンソールでフォルダーとして表示されますが、プログラム的にはフォルダーではなく、文字列値です。

  2. S3バケットを構造化しようとしている場合、命名規則(ファイルに与えるキー)は、通常のディレクトリパターン、つまり_folder/subfolder/file.txt_に従うだけです。

    (使用している言語に応じて)検索するときは、区切り文字付きのプレフィックスを使用して検索できます。 Javaでは、listObjects(String storageBucket, String prefix, String delimiter)メソッド呼び出しになります。

    storageBucketはバケットの名前、prefixは検索するキー、delimiterprefix

17
tehemperorer

皆さんがおっしゃったように、AWS S3には「フォルダー」はありません。あなたはそれらを間違って考えています。 AWS S3には「オブジェクト」があり、これらのオブジェクトはフォルダのように見えますが、Wordの意味での実際のフォルダではありません。 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

このコマンドの面白いところは、このコマンドを実行する前にすべての「フォルダー」(オブジェクト)を作成する必要がないことです。つまり、「フォルダー」(オブジェクト)に物を入れることができますが、このコマンドを使用して、前述のように「フォルダー」(オブジェクト)内にシミュレートされたフォルダー構造を作成できます。たとえば、S3バケット内に「importer」という名前の「フォルダ」(オブジェクト)があり、「フォルダ」(オブジェクト)構造の年、月、そしてサンプルに「sample.txt」を挿入するとします。フォルダー」(オブジェクト)すべての中に。

バケット内に「インポーター」オブジェクトしかない場合、このコマンドを実行する前に年、月、およびサンプルオブジェクト(「フォルダー」)を作成するために事前にアクセスする必要はありません。このコマンドは次のように実行できます。

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

Put-objectコマンドが実行され、-keyフラグで指定したパスが作成されます。ちょっとした宝石があります。S3にアップロードするファイルがない場合でも、S3バケット内にオブジェクト(「フォルダー」)を作成できます。たとえば、「フォルダーを作成する」シェルスクリプトを作成しましたバケット内で、-bodyフラグをオフにし、ファイル名を指定せず、-keyフラグで指定されたパスの末尾にスラッシュを残すことにより、システムはS3バケット内に目的のシミュレートされたフォルダー構造を作成しますプロセスにファイルを挿入せずに。

うまくいけば、これがシステムを少しよく理解するのに役立つでしょう。

注:「フォルダ」構造を作成したら、S3の「sync」コマンドを使用して、子孫の「フォルダ」をローカルマシンのフォルダ、または別のS3バケットと同期できます。

16
Jravict

AWS:S ​​ Rails gemはこれを単独で行います:

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

teaserimagesの「フォルダー」がまだ存在しない場合、それらを自動的に作成します。

9
samvermette

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");
        }
    }];
}
5
Yogesh Dalavi

aws cli を使用すると、フォルダー全体をバケットにコピーできます。

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

aws s3 syncを使用してフォルダーをsyncするオプションもあります

4
kicker86

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コンソールを更新すると、フォルダーが表示されます

3
elranu

Swift=の場合、フォルダー名にStringを渡すメソッドを作成しました。

スウィフト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")
2
Daniel Leonard

これは分裂的なトピックなので、ここにfoldersと注を追加するためのAWS S3コンソールの2019年のスクリーンショットがあります:

フォルダーを作成すると、S3コンソールは、上記の名前にサフィックス「/」を追加したオブジェクトを作成し、そのオブジェクトはS3コンソールにフォルダーとして表示されます。

次に、「コーディングを使用」すると、有効なフォルダー名文字列とスラッシュを追加するだけでオブジェクト名を調整できます。

Adding folders to S3

1
Drakes

探しているものを達成する方法は次のとおりです(コード/ 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 ...ステートメントを実行できるようになります。つまり、通常どおりfolderを管理します。

上記で作成したこの新しいファイルが必要ない場合は、単に削除してください。これで、s3バケットが作成されました。

1
Yusuf Hassan

利用可能な言語から選択した言語を選択できます AWS SDK

または、 PythonGo。NetJavaで利用可能なminioクライアントライブラリを試すことができますJavascript アプリケーション開発環境には、すべての基本的な操作がリストされたサンプルディレクトリがあります。

免責事項: Minio で働いています

0
koolhead17

s3バケット内にディレクトリを作成し、その中にコンテンツをコピーする順序は非常に簡単です。

S3コマンドを使用できます:aws s3 cp abc/def.txt s3:// mybucket/abc /

注:/がディレクトリを作成する必要があります。そうでない場合は、s3のファイルになります。

0
Manoj Rana

以下は、「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

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
    })
}
0
Mohsin Qureshi