2014-05-08 18 views
12

Tôi có một số đối tượng được lưu trữ trong Amazon S3 có loại nội dung tôi cần thay đổi từ text/html thành application/rss+xml. Tôi thu thập rằng nó sẽ có thể làm điều này với một lệnh sao chép, xác định cùng một đường dẫn cho nguồn và đích. Tôi đang cố gắng để làm điều này bằng cách sử dụng công cụ cli AWS, nhưng tôi nhận được lỗi này:Làm cách nào để thay đổi kiểu nội dung của đối tượng bằng aws cli?

$ aws s3 cp s3://mybucket/feed/ogg/index.html \ 
      s3://mybucket/feed/ogg/index.html \ 
      --content-type 'application/rss+xml' 
copy failed: s3://mybucket/feed/ogg/index.html 
to s3://mybucket/feed/ogg/index.html 
A client error (InvalidRequest) occurred when calling the 
CopyObject operation: This copy request is illegal because it is 
trying to copy an object to itself without changing the object's 
metadata, storage class, website redirect location or encryption 
attributes. 

Nếu tôi chỉ định một con đường khác cho nguồn và đích, tôi không nhận được lỗi:

$ aws s3 cp s3://mybucket/feed/ogg/index.html \ 
      s3://mybucket/feed/ogg/index2.html \ 
      --content-type 'application/rss+xml' 
copy: s3://mybucket/feed/ogg/index.html 
to s3://mybucket/feed/ogg/index2.html 

Mặc dù lệnh hoàn tất thành công, đối tượng index2.html được tạo với loại nội dung text/html, không phải loại application/rss+xml mà tôi đã chỉ định.

Làm cách nào tôi có thể sửa đổi dòng lệnh này để làm cho nó hoạt động?

+1

Chỉ cần thấy [vấn đề này] (https://github.com/aws/aws-cli/issues/652#issuecomment-41213226) báo cáo cùng một vấn đề. Chủ đề đó bao gồm một vài cách giải quyết, vì vậy tôi sẽ xem cách tôi tiếp tục với họ. – nelstrom

Trả lời

8

Có thể sử dụng ở mức độ thấp s3api để thực hiện thay đổi này:

$ aws s3api copy-object --bucket archive --content-type "application/rss+xml" \ 
    --copy-source archive/test/test.html --key test/test.html \ 
    --metadata-directive "REPLACE" 

http://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html

Vấn đề đã được chỉ vì không thể xác định --metadata-directive. Cảm ơn bạn đã chỉ ra số open issue/feature request, nelstrom!

+0

Làm thế nào điều này có thể được thực hiện cho một số đối tượng với một phần mở rộng nhất định? – bart

+0

Có thể có một cách rõ ràng hơn, nhưng bạn có thể liệt kê đối tượng trong một tệp rồi đọc tất cả các dòng và thực hiện lệnh trên trên mỗi dòng, vì vậy ở trên sẽ trông giống như: 'trong khi đọc dòng; làm copy-object --bucket lưu trữ --content-type "application/rss + xml" --copy-source archive/$ line.html --key $ line.html - chỉ thị siêu dữ liệu "REPLACE"; đã hoàn thành Cawb07

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