2010-03-20 29 views
68

Làm cách nào để đổi tên khóa S3 trong thùng bằng boto?Boto Amazon S3: Làm cách nào để đổi tên một tệp trong một nhóm?

+1

Đã bỏ phiếu để mở lại, đây là một câu hỏi khá đơn giản không phải là điều tuyệt vời. Sẽ chỉnh sửa để đề cập rõ ràng rằng tệp đó có nghĩa là khóa s3. – David

+0

Trong trường hợp bất kỳ ai thắc mắc, bạn có thể làm điều này thông qua giao diện web AWS (nhấp chuột phải vào tập tin -> Đổi tên) –

Trả lời

67

Bạn không thể đổi tên tệp trong Amazon S3. Bạn có thể sao chép chúng bằng tên mới, sau đó xóa tên gốc, nhưng không có chức năng đổi tên phù hợp.

+10

Chỉ cần lưu ý rằng tính năng sao chép trông giống như tức thì (có thể là liên kết sym). Vì vậy, không có vấn đề với tốc độ làm điều này. –

+17

Tại thời điểm nhận xét này, nó KHÔNG có vẻ là ngay lập tức. Tôi đang sao chép tệp 2GB và mất vài phút. – dtbarne

+0

1) Ai đó có thể cho tôi biết, phải mất bao nhiêu thời gian để sao chép và dán một tệp 3 GB trong cùng một nhóm và tại cùng một vị trí. và sau đó xóa tệp gốc. 2) Có vẻ như giao diện người dùng đã đổi tên chức năng. Nhưng giao diện người dùng cũng hoạt động theo cách tương tự (sao chép và xóa) trong nền. – shiva

-6
//Copy the object 
AmazonS3Client s3 = new AmazonS3Client("AWSAccesKey", "AWSSecretKey"); 

CopyObjectRequest copyRequest = new CopyObjectRequest() 
     .WithSourceBucket("SourceBucket") 
     .WithSourceKey("SourceKey") 
     .WithDestinationBucket("DestinationBucket") 
     .WithDestinationKey("DestinationKey") 
     .WithCannedACL(S3CannedACL.PublicRead); 
s3.CopyObject(copyRequest); 

//Delete the original 
DeleteObjectRequest deleteRequest = new DeleteObjectRequest() 
     .WithBucketName("SourceBucket") 
     .WithKey("SourceKey"); 
s3.DeleteObject(deleteRequest); 
+20

-1: đây là giải pháp với [SDK AWS cho .NET] (http://aws.amazon.com/sdkfornet/) thay vì giải pháp được yêu cầu với [boto] (https://github.com/boto/boto), mà là một gói Python cung cấp giao diện cho Amazon Web Services_. –

38

Dưới đây là một ví dụ về một hàm Python sẽ sao chép một đối tượng S3 sử dụng Boto 2:

import boto 

def copy_object(src_bucket_name, 
       src_key_name, 
       dst_bucket_name, 
       dst_key_name, 
       metadata=None, 
       preserve_acl=True): 
    """ 
    Copy an existing object to another location. 

    src_bucket_name Bucket containing the existing object. 
    src_key_name  Name of the existing object. 
    dst_bucket_name Bucket to which the object is being copied. 
    dst_key_name  The name of the new object. 
    metadata   A dict containing new metadata that you want 
         to associate with this object. If this is None 
         the metadata of the original object will be 
         copied to the new object. 
    preserve_acl  If True, the ACL from the original object 
         will be copied to the new object. If False 
         the new object will have the default ACL. 
    """ 
    s3 = boto.connect_s3() 
    bucket = s3.lookup(src_bucket_name) 

    # Lookup the existing object in S3 
    key = bucket.lookup(src_key_name) 

    # Copy the key back on to itself, with new metadata 
    return key.copy(dst_bucket_name, dst_key_name, 
        metadata=metadata, preserve_acl=preserve_acl) 
0

Không có phương pháp trực tiếp để đổi tên tập tin trong s3. những gì bạn phải làm là sao chép các tập tin hiện có với tên mới (Chỉ cần thiết lập các khóa mục tiêu) và xóa một cũ. Cảm ơn bạn

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