2011-07-22 48 views
26

Tôi muốn thêm Thư mục vào thùng sazon amazon của tôi bằng cách sử dụng mã hóa. Bạn có thể đề nghị tôi làm thế nào để đạt được điều này?Thêm thư mục vào thùng Amazon s3

+5

Nó sẽ giúp xác định trong đó là ngôn ngữ được bạn "mã hóa". – samvermette

Trả lời

37

Không có thư mục nào trong Amazon S3. Nó chỉ là hầu hết các công cụ trình duyệt S3 có sẵn hiển thị một phần của tên khóa được phân tách bằng dấu gạch chéo làm thư mục.

Nếu bạn thực sự cần rằng bạn có thể tạo một đối tượng trống với dấu gạch chéo ở cuối. ví dụ. "folder /" Nó trông giống như một thư mục nếu bạn mở nó bằng một công cụ GUI và AWS Console.

+5

Dường như có thư mục cho tôi? – Nate

+0

Xem http://docs.aws.amazon.com/AmazonS3/latest/UG/FolderOperations.html – lucasddaniel

3

Với AWS SDK Net hoạt động hoàn hảo, chỉ cần thêm "/" ở cuối tên thư mục:

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

Sau đó làm mới giao diện điều khiển AWS của bạn, và bạn sẽ thấy thư mục

9

Các AWS:S3 ray đá quý thực hiện điều này bằng cách riêng của mình:

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

sẽ tự động tạo ra các teaserimages "thư mục" nếu họ làm chưa hiện hữu.

16

Java với AWS SDK:

  1. Không có thư mục trong s3, chỉ có cặp/giá trị then chốt. Chìa khóa có thể chứa các dấu gạch chéo (/) và điều đó sẽ làm cho nó xuất hiện dưới dạng một thư mục trong bảng điều khiển quản lý, nhưng theo chương trình, nó không phải là một thư mục mà nó là một giá trị String.

  2. Nếu bạn đang cố gắng cấu trúc xô s3 của mình, thì quy ước đặt tên của bạn (các khóa bạn cung cấp tệp) có thể thực hiện theo các mẫu thư mục thông thường, tức là folder/subfolder/file.txt.

    Khi tìm kiếm (tùy thuộc vào ngôn ngữ bạn đang sử dụng), bạn có thể tìm kiếm qua tiền tố bằng dấu phân tách. Trong Java, nó sẽ là một cuộc gọi phương thức listObjects(String storageBucket, String prefix, String delimiter).

    storageBucket là tên của nhóm, prefix là khóa bạn muốn tìm kiếm và delimiter được sử dụng để lọc tìm kiếm của bạn dựa trên số prefix.

12

Như mọi người đã nói với bạn, trong AWS S3 không có bất kỳ "thư mục" nào, bạn đang nghĩ đến chúng không chính xác. AWS S3 có "đối tượng", các đối tượng này có thể trông giống như các thư mục nhưng chúng không thực sự là thư mục theo nghĩa đầy đủ nhất của từ. Nếu bạn tìm kiếm việc tạo thư mục trên Amazon AWS S3, bạn sẽ không tìm thấy nhiều kết quả tốt.

Có một cách để tạo "thư mục" theo nghĩa là bạn có thể tạo cấu trúc thư mục mô phỏng trên S3, nhưng một lần nữa, quấn đầu quanh thực tế là bạn đang tạo đối tượng trong S3 chứ không phải thư mục. Cùng với đó, bạn sẽ cần lệnh "put-object" để tạo cấu trúc thư mục mô phỏng này. Bây giờ, để sử dụng lệnh này, bạn cần cài đặt các công cụ AWS CLI, hãy truy cập vào đây AWS CLI Installation để được hướng dẫn cài đặt chúng.

Lệnh là thế này:

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

Bây giờ, phần thú vị về lệnh này là, bạn không cần phải có tất cả các "thư mục" (đối tượng) tạo ra trước khi bạn chạy lệnh này.Điều này có nghĩa là bạn có thể có một "thư mục" (đối tượng) để chứa mọi thứ, nhưng sau đó bạn có thể sử dụng lệnh này để tạo cấu trúc thư mục mô phỏng trong "thư mục" (đối tượng) như tôi đã thảo luận trước đó. Ví dụ, tôi có một "thư mục" (đối tượng) có tên là "nhà nhập khẩu" trong thùng S3 của tôi, cho phép nói rằng tôi muốn chèn sample.txt trong một cấu trúc "thư mục" (đối tượng) của năm, tháng và sau đó là một mẫu " thư mục "(đối tượng) trong tất cả điều đó.

Nếu tôi chỉ có đối tượng "nhà nhập khẩu" trong nhóm của mình, tôi không cần phải đi trước để tạo năm, tháng và đối tượng mẫu ("thư mục") trước khi chạy lệnh này. Tôi có thể chạy lệnh này như vậy:

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

Lệnh put-object sau đó sẽ đi vào và tạo đường dẫn mà tôi đã chỉ định trong cờ --key. Dưới đây là một chút ngọc: ngay cả khi bạn không có tệp để tải lên S3, bạn vẫn có thể tạo đối tượng ("thư mục") trong nhóm S3, ví dụ, tôi đã tạo tập lệnh shell để "tạo thư mục" bên trong thùng, bằng cách bỏ cờ --body và không chỉ định tên tệp và để dấu gạch chéo ở cuối đường dẫn được cung cấp trong cờ --key, hệ thống sẽ tạo cấu trúc thư mục mô phỏng mong muốn trong nhóm S3 mà không chèn một tập tin trong tiến trình.

Hy vọng điều này sẽ giúp bạn hiểu hệ thống tốt hơn một chút. Lưu ý: khi đã tạo cấu trúc "thư mục", bạn có thể sử dụng lệnh "đồng bộ" của S3 để đồng bộ hóa thư mục con "" với một thư mục trên máy cục bộ của bạn, hoặc thậm chí với một thùng S3 khác.

+0

Tôi nhận thấy câu hỏi này đã chết một thời gian, nhưng tôi chưa bao giờ tìm thấy câu trả lời thỏa đáng cho chính câu hỏi này, tôi chỉ đã xảy ra để đi qua các thuật ngữ đúng và tôi chơi với một số kịch bản shell đến điểm mà tôi đã tìm ra cách để làm điều này. Vì vậy, tôi muốn đưa ra câu trả lời thực sự cho bất cứ ai cần biết cách thực hiện điều này. – Jravict

+0

liên quan (đối với những người tự hỏi về các s3 s3 khác nhau có sẵn, ví dụ, '' s'' vs 's3api'): https://stackoverflow.com/a/26396150/127971 Sử dụng 'aws s3' có thể dễ dàng hơn mặc dù để cài đặt và sử dụng cho nhiều tác vụ, ví dụ: để sao chép tất cả các tệp trong pwd cục bộ sang từ xa: đồng bộ hóa 'aws s3. s3: // my-bucket ' – michael

+0

Ví dụ CLI của việc thêm dấu gạch chéo, và rời khỏi cơ thể:' aws s3api put-object --bucket my-bucket --key folder/' –

0

Bạn có thể chọn ngôn ngữ bạn chọn từ có sẵn AWS SDK

Hoặc bạn có thể thử các thư viện client minio sẵn trong Python, Go, .Net, Java, Javascript cho môi trường phát triển ứng dụng của bạn, nó có ví dụ thư mục với tất cả các thao tác cơ bản liệt kê.

Disclaimer: Tôi làm việc cho Minio

+0

thật đáng buồn, ví dụ của bạn không bao gồm một ví dụ về việc tạo một thư mục như là một phần của việc đặt một đối tượng ... –

5

Trong iOS (Objective-C), tôi đã đi theo con đường

Bạn có thể thêm mã dưới đây để tạo ra một thư mục bên trong amazon s3 xô lập trình. Đây là đoạn mã hoạt động. Bất kỳ đề nghị Chào mừng.

-(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

Một số giải thích ngoài mã sẽ làm cho câu trả lời này hữu ích hơn. –

+0

@yogesh Dalavi mã này hoạt động. –

2

Đối với Swift tôi đã tạo phương thức mà bạn chuyển vào một tên thư mục String.

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 
    }) 
} 

Sau đó, chỉ cần gọi

0

Trong nhanh chóng 2.2 bạn có thể tạo thư mục bằng

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 
    }) 
} 
3

Với aws cli, nó có thể sao chép một toàn bộ thư mục vào một nhóm.

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

Ngoài ra còn có tùy chọn để đồng bộ hóa thư mục sử dụng aws s3 sync

+0

Đối với tôi, chìa khóa cũng đặt tên thư mục vào đích. – xdhmoore

0

Dưới đây tạo một thư mục trống được gọi là "mydir1".

Dưới đây là mã nodejs, nó phải giống với các ngôn ngữ khác.

Bí quyết là có dấu gạch chéo (/) ở cuối tên đối tượng, như trong "mydir1 /", nếu không một tệp có tên "mydir1" sẽ được tạo.

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" 
     } 
     */ 
    } }); 

Nguồn: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

Các vấn đề liên quan