2011-07-22 114 views

回答

37

有在Amazon S3中沒有文件夾。只是大多數可用的S3瀏覽器工具都顯示了斜槓分隔的部分密鑰名稱作爲文件夾。

如果你真的需要,你可以在結束斜槓創建一個空的對象。例如「文件夾/」如果您使用GUI工具和AWS控制檯打開它,它將看起來像一個文件夾。

+5

它看起來像我的文件夾? – Nate

+0

看這個http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html – lucasddaniel

3

有了AWS SDK淨完美的作品,只要加入「/」這個名字的文件夾的結尾:

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控制檯,你會看到該文件夾​​

9

AWS:S3軌寶石做到這一點本身:

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

會自動創建teaserimages「文件夾」,如果他們不這樣做已經存在。

16

與Java SDK AWS:

  1. 有在S3中沒有文件夾,只有鍵/值對。該密鑰可以包含斜線(/),並且會使其顯示爲管理控制檯中的文件夾,但通過編程方式,它不是文件夾,而是字符串值。

  2. 如果您嘗試構建s3存儲桶,那麼您的命名約定(您提供文件的密鑰)可以簡單地遵循正常的目錄模式,即folder/subfolder/file.txt

    當搜索(具體取決於您使用的語言),您可以用分隔符通過前綴搜索。在Java中,這將是一個listObjects(String storageBucket, String prefix, String delimiter)方法調用。

    storageBucket是你斗的名稱,prefix是你要搜索的關鍵,而delimiter用於搜索基於關閉prefix進行過濾。

12

正如大家都告訴過你的,在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插入年份,月份的「文件夾」(對象)結構中,然後將樣本「文件夾「(對象)。

如果我的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存儲桶中創建對象(「文件夾」),例如,我創建了一個shell腳本來「創建文件夾」在桶中,通過放棄--body標誌,並且不指定文件名,並在--key標誌中提供的路徑末尾留下斜線,系統會在S3存儲桶內創建所需的模擬文件夾結構而不在過程中插入文件。

希望這可以幫助您更好地瞭解系統。注意:一旦創建了「文件夾」結構,您可以使用S3的「同步」命令將後代「文件夾」與本地計算機上的文件夾或甚至另一個S3存儲桶同步。

+0

我意識到這個問題已經死了一段時間,但我從來沒有發現一個滿意的答覆過這個問題我自己,我只是碰巧遇到了正確的術語,我玩了一些shell腳本,直到我找出如何做到這一點。所以我想給任何需要知道如何做到這一點的人一個真正的答案。 – Jravict

+0

相關的(對於那些想了解一下各種可用的S3 CLI,例如,.'s3' VS's3api'):https://stackoverflow.com/a/26396150/127971使用'AWS s3'可能會更容易,雖然安裝和用於許多任務,例如,將本地pwd中的所有文件複製到遠程:'aws s3 sync。 S3://我鬥'加最後的斜線,並留下脫去了身上的 – michael

+0

CLI例如:'AWS s3api把對象--bucket我鬥--key文件夾/' –

0

您可以從可用AWS SDK

選擇您所選擇的語言或者你可以嘗試在現有minio客戶端庫PythonGo.NetJavaJavascript爲您的應用程序開發環境,它例如與所有的基本操作指南上市。

聲明:我工作了Minio

+0

可悲的是,你的例子不包括創建文件夾作爲放置對象的一部分的示例... –

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

除了代碼之外,還有一些解釋會使此答案更有用。 @yogesh Dalavi這個代碼可以用於 –

+0

。 –

2

對於斯威夫特,我創建,你在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 
    }) 
} 

然後,只需使用

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

在SWIFT 2.2,您可以創建文件夾,也可以複製整個文件夾到一個存儲桶。

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

也有選項同步使用aws s3 sync

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