2014-05-08 27 views
12

Mam kilka obiektów przechowywanych w Amazon S3, których treść typu I należy zmienić z text/html na application/rss+xml. Rozumiem, że powinno to być możliwe za pomocą polecenia copy, określającego tę samą ścieżkę dla źródła i miejsca docelowego. Staram się to zrobić za pomocą narzędzi CLI AWS, ale ja dostaję ten błąd:Jak mogę zmienić typ zawartości obiektu za pomocą 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. 

Gdybym określić inną ścieżkę do źródła i miejsca przeznaczenia, nie pojawia się błąd:

$ 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 

Mimo że polecenie zakończyło się pomyślnie, obiekt index2.html jest tworzony z typem treści text/html, a nie z podanym typem application/rss+xml.

Jak zmodyfikować tę linię poleceń, aby działała?

+1

Właśnie zobaczyłem [ten problem] (https://github.com/aws/aws-cli/issues/652#issuecomment-41213226) zgłaszając ten sam problem. Ten wątek zawiera kilka obejść, więc zobaczę, jak sobie z nimi poradzę. – nelstrom

Odpowiedz

8

Jest możliwe, aby korzystać z niskiego poziomu s3api wprowadzić tę zmianę:

$ 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

Problem został po prostu nie jest w stanie określić --metadata-directive. Dzięki za wskazanie open issue/feature request, nelstrom!

+0

Jak można to wykonać dla kilku obiektów z określonym rozszerzeniem? – bart

+0

Może być czystszy sposób, ale możesz wyświetlić obiekt w pliku, a następnie przeczytać wszystkie wiersze i wykonać powyższe polecenie w każdym wierszu, więc powyższe byłoby wyglądać tak: 'while read line; do copy-object --bucket archive --content-type "application/rss + xml" - archiwum copy-źródłowe/$ line.html --key $ line.html --metadata-dyrektywa "REPLACE"; done Cawb07

Powiązane problemy