Изменить содержимое-расположение существующего объекта S3 - PullRequest
9 голосов
/ 10 апреля 2010

В S3 REST API я добавляю метаданные к существующему объекту с помощью команды PUT (Копировать) и копирую ключ в то же место с помощью 'x-amz-metadata-directive' = 'REPLACE'

Что я хочу сделать, это изменить имя загружаемого файла, установив:

Content-Disposition: attachment; filename=foo.bar;

Это правильно устанавливает метаданные, но когда я загружаю файл, он все равно использует имя ключа вместо 'foo.bar'

Я использую программный инструмент S3 Browser для просмотра метаданных, и выглядит правильно (за исключением того, что 'Content-Disposition' в нижнем регистре, как это было S3, попросите меня подписать)

Затем, используя S3 Browser, я просто нажал, затем сохранил, ничего не меняя и теперь он работает ???

Чего мне не хватает, почему настройка метаданных 'Content-Disposition: attachment; filename=foo.bar;' из моего веб-приложения не работает, но работает из браузера S3?

Ответы [ 2 ]

7 голосов
/ 11 апреля 2010

РЕШИТЬ:

Доку на http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?RESTAuthentication.html

, кажется, неправильно, он говорит:

Обратите внимание, как сортируются заголовки 'x-amz-', обрезается пробел, конвертируется заглавная буква, и несколько заголовков с одинаковым именем объединяются с помощью запятой для разделения значений.

Обратите внимание, что в заголовке StringToSign отображаются только заголовки Content-Type и Content-MD5HTTPentity. Заголовки объекта otherContent- * не отображаются. Однако Content-Disposition должен быть установлен специально и не включен как: x-amz-meta-Content-Disposition

Теперь работает нормально.

1 голос
/ 15 марта 2018

здесь: здесь используется cli для установки заголовка расположения содержимого для всех файлов в пути внутри сегмента (а также для их установки как public):

aws s3 ls s3://mybucket/brand_img/ios/|awk {'print $4'} > objects.txt

 while read line; do aws s3api copy-object --bucket mybucket  \
--copy-source /mybucket/brand_img/ios/$line --key brand_img/ios/$line \
--metadata-directive REPLACE --metadata Content-Disposition=$line --acl public-read; done < objects.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...