コーディングを使用してAmazon s3バケットにFolderを追加します。これを達成する方法を教えてください。
Amazon S3にはフォルダーはありません。使用可能なS3ブラウザーツールのほとんどが、スラッシュとして区切られたキー名の一部をフォルダーとして表示しているだけです。
本当に必要な場合は、最後にスラッシュを付けて空のオブジェクトを作成できます。例えば「folder /」GUIツールとAWSコンソールで開くと、フォルダーのように見えます。
AWS SDKを使用したJava:
S3にはフォルダーはなく、キー/値のペアのみがあります。キーにはスラッシュ(_/
_)を含めることができます。これにより、管理コンソールでフォルダーとして表示されますが、プログラム的にはフォルダーではなく、文字列値です。
S3バケットを構造化しようとしている場合、命名規則(ファイルに与えるキー)は、通常のディレクトリパターン、つまり_folder/subfolder/file.txt
_に従うだけです。
(使用している言語に応じて)検索するときは、区切り文字付きのプレフィックスを使用して検索できます。 Javaでは、listObjects(String storageBucket, String prefix, String delimiter)
メソッド呼び出しになります。
storageBucket
はバケットの名前、prefix
は検索するキー、delimiter
はprefix
。
皆さんがおっしゃったように、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バケットと同期できます。
AWS:S Rails gemはこれを単独で行います:
AWS::S3::S3Object.store("teaser/images/troll.png", file, AWS_BUCKET)
teaser
とimages
の「フォルダー」がまだ存在しない場合、それらを自動的に作成します。
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");
}
}];
}
aws cli を使用すると、フォルダー全体をバケットにコピーできます。
aws s3 cp /path/to/folder s3://bucket/path/to/folder --recursive
aws s3 sync
を使用してフォルダーをsyncするオプションもあります
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コンソールを更新すると、フォルダーが表示されます
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")
探しているものを達成する方法は次のとおりです(コード/ 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バケットが作成されました。
s3バケット内にディレクトリを作成し、その中にコンテンツをコピーする順序は非常に簡単です。
S3コマンドを使用できます:aws s3 cp abc/def.txt s3:// mybucket/abc /
注:/がディレクトリを作成する必要があります。そうでない場合は、s3のファイルになります。
以下は、「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
})
}