веб-сервисы Amazon — предопределенный URL-адрес AWS S3 PHP SDK ограничивает тип содержимого

Я пытаюсь сделать предварительно назначенный запрос PutObject, используя AWS S3 PHP SDK.

Я получил запрос на работу, но теперь я хочу, чтобы мои пользователи могли загружать только видеофайлы. Я перепробовал много комбинаций и много искал, но не смог заставить его работать.

Вот пример кода, который я использую:

$cmd = $this->s3client->getCommand('PutObject', [
'Bucket' => 'myBucket',
'Key' => 'inputs/' . $movie->getId(),
'ACL' => 'private',
'Conditions' => ['Starts-With', '$Content-Type', 'video/'], // I have tried other combinations but it seems to not work
]);

$request = $this->s3client->createPresignedRequest($cmd, '+30 minutes');

$movie->setSignedUrl((string)$request->getUri());

Созданный подписанный URL-адрес никогда не включает Content-Type в параметр запроса X-Amz-SignedHeaders, только хост включен.

0

Решение

putObject() запрос не документирован Conditions ключ.

Вы, кажется, путаете S3 PUT загрузить интерфейс с предварительно подписан POST возможность, которая поддерживает условия документа политики, такие как ['Starts-With', '$Content-Type', 'video/'],

PUT не поддерживает «начинается с». Это требует точный Content-Type и ключ для этого (который должен привести к появлению заголовка в X-Amz-SignedHeaders параметр строки запроса) просто ContentType, Он идет во внешнем массиве параметров, так же, как Bucket а также Key,

Но если вы хотите поддерживать несколько типов контента, не зная заранее конкретного типа, вам нужно использовать POST добавления.

1

Другие решения

Других решений пока нет …