Добавление данных тега стоимости в данные формы S3 в PHP - PullRequest
1 голос
/ 16 марта 2020

У меня есть рабочий PHP код, который генерирует подписанные данные формы, которые мое приложение JS использует для загрузки файла в S3. Все работает нормально.

Теперь мне нужно автоматически добавить тег стоимости в загруженный файл. Я добавил это поле x-amz-tagging, но оно не работает, и я не могу найти пример кода для этого.

Я надеюсь, что кто-то может указать мне верное направление. Вот мой код:

$formInputs = [
            'acl' => 'private',
            'Content-Type' => $type,
            'key' => "company_{$idCompany}/$s3Filename",
            'x-amz-tagging' => "origen={$companyName}"];

$options = [
            ['bucket' => self::S3_BUCKET],
            ['acl' => 'private'],
            ['Content-Type' => $type],          
            ['starts-with', '$key', "company_{$idCompany}/"],
            ['starts-with', '$x-amz-tagging', "origen={$companyName}"]];

$expires = '+1 hours';

$postObject = new \Aws\S3\PostObjectV4($s3Client, self::S3_BUCKET, $formInputs, $options, $expires);

Обновление: я могу установить тег для объекта с помощью функции putObjectTagging после его загрузки, поэтому я не думаю, что здесь есть какие-либо проблемы с разрешениями.

1 Ответ

0 голосов
/ 18 марта 2020

Для этого необходимо выполнить два шага:

Вот последний рабочий код:

$formInputs = [
    'acl' => 'private',
    'Content-Type' => $type,
    'key' => "company_{$idCompany}/$s3Filename",
    'Tagging' => "<Tagging><TagSet><Tag><Key>origen</Key><Value>{$companyName}</Value></Tag></TagSet></Tagging>"];

$options = [
  ['bucket' => self::S3_BUCKET],
  ['acl' => 'private'],
  ['Content-Type' => $type],
  ['starts-with', '$key', "company_{$idCompany}/"],
  ['eq', '$Tagging', "<Tagging><TagSet><Tag><Key>origen</Key><Value>{$companyName}</Value></Tag></TagSet></Tagging>"]];

$expires = '+1 hours';

$postObject = new \Aws\S3\PostObjectV4($s3Client, self::S3_BUCKET, $formInputs, $options, $expires);

Обновление: торговый представитель Amazon подтвердил мне, что ценовые теги работают только на уровне корзины, а не на уровне объекта , поэтому, если вашему приложению необходимо разделить затраты S3 между несколькими клиентами, вы должны создать сегмент для каждого клиента и отметить тег.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...