2014-05-08 8 views
12

Ich habe mehrere Objekte in Amazon S3 gespeichert, deren Inhaltstyp ich von text/html zu application/rss+xml ändern muss. Ich nehme an, dass es möglich sein sollte, dies mit einem Kopierbefehl zu tun, der den gleichen Pfad für die Quelle und das Ziel angibt. Ich versuche, dies mit Hilfe der AWS cli Tool zu tun, aber ich bin immer diese Fehlermeldung:Wie kann ich den Inhaltstyp eines Objekts mit aws cli ändern?

$ 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. 

Wenn ich einen anderen Weg für Quelle und Ziel angeben, ich habe nicht den Fehler:

$ 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 

Auch wenn der Befehl erfolgreich ausgeführt wird, wird das Objekt index2.html mit dem Inhaltstyp text/html erstellt, nicht der von mir angegebene Typ .

Wie kann ich diese Befehlszeile ändern, damit sie funktioniert?

+1

Just sah [diese Ausgabe] (https://github.com/aws/aws-cli/issues/652#issuecomment-41213226) das gleiche Problem melden. Dieser Thread enthält ein paar Workarounds, also werde ich sehen, wie ich mit ihnen auskomme. – nelstrom

Antwort

8

Es ist möglich, den niedrigen Pegel zu verwenden s3api diese Änderung vorzunehmen:

$ 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

Das Problem war einfach nicht die --metadata-directive angeben zu können. Danke für den Hinweis auf die open issue/feature request, nelstrom!

+0

Wie kann dies für mehrere Objekte mit einer bestimmten Erweiterung ausgeführt werden? – bart

+0

Es mag einen saubereren Weg geben, aber Sie könnten das Objekt in einer Datei auflisten, dann alle Zeilen lesen und den obigen Befehl auf jeder Zeile ausführen, so würde das obige aussehen: 'while read line; do copy-object --bucket-Archiv --content-type "application/rss + xml" --copy-source archive/$ line.html --schlüssel $ line.html --metadata-directive "REPLACE"; Fertig Cawb07

Verwandte Themen